Quelle est la différence entre android: height et android: layout height?
<TextView
android:layout_width="match_parent"
android:layout_height="48dp"
android:paddingTop="48dp"
android:text="Test"
/>
Je m'attendrais à ce que le TextView ait une hauteur mesurée de 96dp, indépendamment de la quantité d'Espace (hauteur) "Test" pris (s'attendrait à ce qu'il se coupe).
Au lieu de cela, j'obtiens le "Test" complet + 48dp pour le remplissage.
, je peux mettre n'importe quelle valeur valide pour layout_height
et obtenir le même résultat.
Pour obtenir ma hauteur 96dp, j'ai besoin de:
<TextView
android:layout_width="match_parent"
android:layout_height="<any valid value>"
android:height="48dp"
android:paddingTop="48dp"
android:text="Test"
/>
Où encore une fois, je peux mettre layout_height
comme toute valeur valide (mais elle doit être là en tant qu'attribut requis).
Je n'ai jamais utilisé le height
attribut en XML mais je n'ai pas trouvé la différence dans les documents, en particulier la façon dont chacun est calculé lorsque l'élément sur lequel il fonctionne a également des valeurs définies pour le remplissage et/ou la marge.
Des ressources Sont disponibles en discuter, ou quelqu'un peut m'expliquer ça ici?
Modifier (résumé des questions):
Il pourrait être la situation dans laquelle je l'ai utilisé, ce qui causait un problème, donc mes exemples ci-dessus peuvent être ignorés (j'ai essayé dans un nouveau projet et j'ai obtenu des résultats différents des combinaisons d'attributs).
Mais mes questions originales s'appliquent toujours (certains chevauchements):
- quelle est la différence entre eux?
- Quand faut-il utiliser l'un plutôt que l'autre?
- l'utilisation de l'un affecte l'utilisation de l'autre?
- l'utilisation de l'un ont des répercussions sur les autres attributs qui peuvent contrôler les dimensions mesurées d'une vue, comme le remplissage ou la marge?
Edit 2 (un côté):
Au cas où cela aiderait à comprendre ma situation initiale par rapport au nouveau projet:
J'ai une activité qui définit windowActionBarOverlay
comme true, donc mon contenu coule sous la barre D'action (translucide).
J'utilise aussi des croûtons, qui apparaissaient maintenant sous la barre D'action. Ben Weiss a suggéré que j'attache le Crouton à un ViewGroup différent, mais je Je ne savais pas à quel ViewGroup l'attacher.
Au lieu de cela, j'ai fourni une vue personnalisée (qui est gonflée quand elle est requise) en tant que Crouton (le TextView de la première partie de la question) avec un remplissage supérieur égal à celui de la barre D'action, alors maintenant il affiche verticalement en dessous de la barre D'action comme d'habitude (avec d'autres problèmes
4 réponses
Question 1:
Tous les attributs commençant par "layout_" sont des indices pour le groupe de vues dont fait partie la vue {[20]. Pour cela, chaque android.view.ViewGroup
a un ensemble de LayoutParams . Le widget lui-même ne les utilise pas.
Le paramètre android:height
est la taille initiale du android.view.View
. Mais si la vue fait partie ViewGroup
alors le {[3] } redimensionnera l'objet en fonction de ses règles de mise en page.
BTW: les nouvelles API ont un nouvel attribut android:minHeight
et android:maxHeight
à clarifier intention des programmeurs.
Notez que si vous ne définissez pas android:height
, la vue calculera la taille elle-même. Ce qui est la bonne chose à faire la plupart du temps.
Question 2:
ViewGroup
est Abstrait-la réponse à cette question dépend de la classe enfant réelle que vous utilisez.
Remarque que WRAP_CONTENT
indique à l'utilisation de ViewGroup
utiliser android:height
. Ce qui signifie que c'est le paramètre correct à utiliser dans votre exemple.
Question 3:
Oui-et récursivement . TableLayout {[20] } va lire et écrire l'attribut android:width
pour trouver l'objet le plus large et redimensionner tous les autres objets.
Question 4:
N pour android:padding
, mais oui pour android:layout_margin
. Notez que les marges sont un paramètre de mise en page et que tous les gestionnaires de mise en page ne prennent pas en charge les marges.
Voir marge vs rembourrage pour plus de détails.
Mots finaux:
Il est plus facile de considérer tous les attributs de largeur et de hauteur comme hints uniquement. Le dernier mot de la la taille d'un objet a le gestionnaire de disposition du ViewGroup
utilisé.
En jouant un peu avec cela, je pense que layout_height
est flexible - une hauteur préférée mais va toujours se développer/se rétrécir avec le contenu - et height
est une valeur définie.
Ce qui se passe dans votre cas, C'est que TextView entoure le texte Test
mais utilise toujours l'attribut 48dp paddingTop
.
Eh bien, android_layout: height spécifie la hauteur de base de la vue tandis qu'android:height spécifie la hauteur de l'objet (par exemple, le bouton dans le xml).
Bonne chance! :)
Android: height permet à la vue d'avoir exactement autant de pixels de hauteur tandis qu'android: layout_height spécifie la hauteur de base de la vue.