2010-02-07 6 views
1

Je déteste poser cette question; pour une raison quelconque, je ne peux pas le comprendre par moi-même. J'ai une LinearLayout verticale qui contient une vue personnalisée que j'ai définie dans mon application et un TextView. J'aimerais que mon affichage personnalisé soit aligné en haut de l'écran et que le TextView soit aligné en bas de l'écran. Malheureusement, peu importe les modifications que je fais aux attributs du fichier XML, ma vue personnalisée semble toujours être centrée verticalement lorsque j'exécute l'émulateur. Le XML est comme ce qui suit:alignement de vue des éléments dans un LinearLayout

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" android:gravity="top"> 

    <CustomView 
    android:id="@+id/customID" 
     android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       tileSize="24" 
       android:focusableInTouchMode="true" android:layout_gravity="top"/> 

    <TextView 
    android:id="@+id/text" 
     android:text="@string/droidtactoe_layout_text" 
     android:visibility="visible" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:gravity="center_horizontal" 
     android:textSize="24sp" android:textColor="#00000000" android:layout_gravity="bottom"/> 

</LinearLayout> 

Répondre

1

d'abord, compte tenu de vos règles (« Je voudrais mon point de vue personnalisé pour être aligné sur le haut de l'écran et le TextView être aligné au bas de l'écran »), Je recommanderais un RelativeLayout, car ce sera plus simple. Il suffit d'utiliser android:layout_alignParentTop="true" sur la CustomView et android:layout_alignParentBottom="true" sur le TextView, et vider tous les trucs gravity/layout_gravity.

Si votre CustomView se comporte toujours mal, remplacez-le temporairement par un Button ou autre. Si le Button s'établit comme prévu, alors il y a quelque chose qui cloche dans l'implémentation de votre CustomView. Si vous héritez d'un vrai View (par exemple, CustomView est une sous-classe de TextView), vous devez hériter de toutes les bonnes fonctionnalités pour la pose de choses. Si votre CustomView est simplement une sous-classe de View, il peut y avoir certaines choses que vous devez remplacer ou appeler que vous n'êtes pas. Je ne l'ai pas fait une sous-classe, seuls les sous-classes de choses comme LinearLayout coutume View, donc je ne suis pas certain à 100% ce que vous manquer.

1

Merci! C'était un problème dans le CustomView. J'utilisais une version modifiée de la vue surchargée de la démo de Snake. Cette démo utilisait un décalage X et Y défini dans onSizeChanged en fonction de la hauteur et de la largeur de la vue. J'utilisais alors ces offsets dans la méthode onDraw pour remplir les dimensions de l'objet que j'essayais de dessiner.

Pour une raison qui n'a pas de sens pour moi maintenant, j'ai supposé que la largeur et la hauteur de la vue seraient limitées en fonction du contenu qui était écrit dans onDraw b/c de la mise en page Largeur et Hauteur wrapContent. Toutefois, la largeur et la hauteur transmises à onSizeChanged correspondaient aux dimensions de l'intégralité de l'écran. Par conséquent, ces décalages forçaient ma vue personnalisée à remplir tout l'écran. J'ai enlevé les offsets et le problème semble être résolu.

Encore une fois, merci beaucoup!

Questions connexes