2010-11-26 9 views
0

J'ai une application avec une mise en page en utilisant les objets de vue suivants. 2 spinners, 2 boutons, 1 seekbar et un objet de vue personnalisé qui est essentiellement une toile que je dessine.Qu'est-ce qui contrôle l'ordre de vue sur l'écran de l'interface utilisateur?

Pour une raison quelconque, les toupies et la barre de recherche sont dessinées sur le dessus de la toile, mais les 2 boutons ne le sont pas. Je suis confus quant à pourquoi c'est.

Alors, comment cela est-il déterminé?

Merci. Editer: XML à la demande (c'est avant de déplacer la customview vers le haut qui résout le problème). Si la commande est supposée être basée sur XML, alors la vue personnalisée devrait avoir couvert les spinners, ce qu'elle n'a pas fait.

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

    <Spinner 
     android:id="@+id/cc_component" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:drawSelectorOnTop="true" 
     android:prompt="@string/cc_component_spinner" /> 

    <TextView 
     android:id="@+id/desc" 
     android:text="@string/step1_desc" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_margin="10dip" 
     android:visibility="gone" 
     android:layout_centerHorizontal="true" 
     android:textSize="25sp"/> 

    <Button 
     android:id="@+id/switch_left" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_centerVertical="true"/> 

    <com.cmllc.zcc.CCView 
     android:id="@+id/cc" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <Button 
     android:id="@+id/switch_right" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_centerVertical="true" 
     android:background="@drawable/rightarrow1" /> 

    <Spinner 
     android:id="@+id/component_color" 
     android:layout_above="@+id/switch_color" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:drawSelectorOnTop="true" 
     android:prompt="@string/component_color_spinner" /> 

    <SeekBar 
     android:id="@+id/switch_color" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:max="100" 
     android:minWidth="200dip" 
     android:progress="50"/> 

</RelativeLayout> 
+0

si vous pouviez montrer le code de votre fichier de disposition ici ... Je pourrais être en mesure d'aider –

Répondre

1

L'ordre dans lequel ils sont ajoutés à la vue doit être le même. Autre que cela, vous pouvez utiliser View.bringChildToFront().

Voir ce post: Defining Z order of views of RelativeLayout in Android

Et dans un post here par Dianne Hackborn, un développeur Android à Google, elle indique la même chose en ce qui concerne le comportement ordre z.

J'ai mis en place votre mise en page, ou aussi près que je pouvais sans toutes vos ressources et objet personnalisé View, et j'obtiens les résultats que je excepté. La première spinner, textview, et le bouton apparaissent sous l'objet personnalisé, que j'imitais ce qui suit:

<TextView 
    android:id="@+id/cc" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#880000FF" /> 

Je vois alors le deuxième bouton, deuxième spinner et seekbar sur le dessus. Faites-vous quelque chose de bizarre avec votre vue personnalisée? C'est peut-être quelque chose qui se passe en raison d'une manipulation ultérieure de vos opinions.

Edit: Je double vérifié et je ne vois en effet l'affichage comme décrit ci-dessus, je

+0

D'accord, j'ai déplacé ma vue personnalisée dans le fichier XML et même si elle a résolu mon problème, je suis toujours confus. Si le fichier XML est le maître, alors les fileurs doivent avoir été couverts par ma vue personnalisée (Canvas) puisqu'ils ont été définis en XML avant la vue personnalisée. – user432209

+0

Je ne suis pas sûr de cette situation spécifique. Si vous publiez le code source pertinent, nous serons peut-être en mesure de mieux déterminer pourquoi précisément vous obteniez le résultat que vous étiez. – Thomas

+0

Édité avec XML – user432209

0

Vous n'êtes pas définir tout votre point de vue par rapport à tous les autres. Dans une mise en page relative, vous devez indiquer que vos vues sont au-dessus, en dessous, etc. Vous devez leur donner des paramètres relatifs, pas seulement align_parent sur quelques-uns d'entre eux.

+0

Les paramètres relatifs (ou leur absence) n'affectent pas un ordre de tirage de ce que j'ai appris au cours des 12 dernières heures. – user432209

+0

Euh, je suppose que cela dépend de ce que vous voulez dire par ordre de tirage. Je supposais qu'il voulait dire que son point de vue empilaient les uns sur les autres – Falmarri