J'ai vu plusieurs exemples qui utilisent Android:layout_height="0px" ou "0dip" mais je ne comprends pas l'impact de cela. Il semble que cela rendrait la présentation haute de 0 pixel. La valeur est elle atténuée par un autre facteur comme le "poids" ou la hauteur des vues parentales ?
Réponses
Trop de publicités?Oui, vous avez raison pour le poids, lorsque vous voulez que la largeur ou la hauteur soit contrôlée par le poids, il est conventionnel de fixer cette valeur à 0dip et de laisser le poids contrôler la valeur réelle. Bien que je sois presque sûr que 0 est juste arbitraire ici, vous pourriez mettre n'importe quoi, mais mettre 0 rend votre intention plus claire.
Lors de l'utilisation d'un LinearLayout, si vous définissez le paramètre layout_weight
à une valeur non nulle et définir le layout_height
(ou layout_width
) à 0px ou 0dip, le LinearLayout distribue l'espace non attribué le long de l'axe approprié en fonction des poids. Par exemple, si vous regardez le layout sous la vue avec l'id *gestures_overlay*, il a layout_height
0dip et layout_weight
1, de sorte que le LinearLayout parent l'étire pour remplir l'espace vertical disponible entre les 2 LinearLayouts environnants. S'il y avait une autre vue avec le même 0dip layout_height
et un layout_weight
ils se partageront l'espace vertical en fonction de leurs valeurs de poids.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="6dip"
android:text="@string/prompt_gesture_name"
android:textAppearance="?android:attr/textAppearanceMedium" />
<EditText
android:id="@+id/gesture_name"
android:layout_width="0dip"
android:layout_weight="1.0"
android:layout_height="wrap_content"
android:maxLength="40"
android:singleLine="true" />
</LinearLayout>
<android.gesture.GestureOverlayView
android:id="@+id/gestures_overlay"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1.0"
android:gestureStrokeType="multiple" />
<LinearLayout
style="@android:style/ButtonBar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/done"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:enabled="false"
android:onClick="addGesture"
android:text="@string/button_done" />
<Button
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="cancelGesture"
android:text="@string/button_discard" />
</LinearLayout>
</LinearLayout>
Un exemple pertinent tiré de la documentation officielle destinée aux développeurs ( http://developer.Android.com/guide/topics/ui/layout/linear.html ) :
Enfants à poids égal
Pour créer une présentation linéaire dans laquelle chaque enfant utilise la même quantité d'espace sur l'écran, définissez la valeur " Android:layout_height " de chaque vue. 0dp "(pour une présentation verticale) ou la largeur Android:layout_width de chaque vue à " 0dp "(pour une présentation horizontale). Définissez ensuite le poids Android:layout_weight de chaque vue à "1".
Lorsque nous devons attribuer poids égal à la vue différente dans LINEAR LAYOUT puis nous attribuons soit layout/width = 0dp (pour l'orientation horizontale), soit layout/height = 0dp (pour l'orientation verticale) et nous définissons View /weight ==1 pour chaque vue à l'intérieur de cette disposition linéaire.
Avantage::: : -- L'attribution de la largeur ou de la hauteur à 0dp n'a pas d'impact et en raison du poids==1, toutes les vues occupent le même espace et couvrent la totalité de la taille de l'écran.