<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, quel que soit l'espace occupé (en termes de hauteur) par "Test" (que l'on s'attend à ce qu'il soit coupé).
Au lieu de cela, je reçois 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 une hauteur de 96dp, il me faut:
<TextView
Android:layout_width="match_parent"
Android:layout_height="<any valid value>"
Android:height="48dp"
Android:paddingTop="48dp"
Android:text="Test"
/>
où encore, je peux mettre layout_height
en tant que valeur valide (mais elle doit être présente en tant qu'attribut obligatoire).
Je n'ai jamais utilisé l'attribut height
dans XML, mais je n'ai pas trouvé de différence dans les documents, en particulier dans le calcul de chacun d'eux lorsque l'élément sur lequel il opère a également des valeurs définies pour le remplissage et/ou la marge.
Existe-t-il des ressources disponibles pour en discuter ou quelqu'un peut-il l'expliquer ici?
C’est peut-être la situation dans laquelle je l’ai utilisée, qui était à l’origine d’un problème, de sorte que mes exemples cités plus haut peuvent être ignorés (j’ai essayé dans un nouveau projet et obtenu des résultats différents des combinaisons d’attributs).
Mais mes questions initiales s'appliquent toujours (quelques chevauchements):
Edit 2 (un aparté):
Si cela peut aider à comprendre ma situation initiale par rapport au nouveau projet:
J'ai une activité qui définit windowActionBarOverlay
sur true, donc mon contenu coule sous l'ActionBar (translucide).
J'utilise également des croûtons, qui apparaissent maintenant sous le ActionBar. Ben Weiss m'a suggéré de joindre le croûton à un autre groupe de vues, mais je ne savais pas à quel groupe de vues le joindre.
Au lieu de cela, j’ai fourni une vue personnalisée (qui est gonflée au besoin) sous la forme du Crouton (le TextView de la première partie de la question) avec un remplissage supérieur égal à celui de la barre d’action. Elle s'affiche donc verticalement sous la barre d’action. normal (avec d'autres problèmes pour un autre jour).
Tous les attributs commençant par »layout_« sont des astuces pour le groupe de vues ViewGroup the View fait partie de. Pour cela, chaque Android.view.ViewGroup
possède 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 est une partie ViewGroup
, la ViewGroup
redimensionnera l'objet en fonction de ses règles de présentation.
BTW: les nouvelles API ont un nouvel attribut Android:minHeight
et Android:maxHeight
afin de clarifier les intentions 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.
ViewGroup
est abstrait - la réponse à cette question dépend de la classe enfant que vous utilisez.
Notez que WRAP_CONTENT
indique à utiliser ViewGroup
pour utiliser Android:height
. Ce qui signifie que c'est le paramètre correct à utiliser dans votre exemple.
Oui - et récursivement. TableLayout lira et écrira l'attribut Android:width
pour trouver l'objet le plus large et redimensionner tous les autres objets.
Non pour Android:padding
mais oui pour Android:layout_margin
. Notez que les marges sont un paramètre de présentation et que tous les gestionnaires de présentation ne prennent pas en charge les marges.
Voir margin vs padding pour plus de détails.
Il est plus facile de considérer tous les attributs de largeur et de hauteur comme étant hints seulement. Le dernier mot de la taille d’un objet a le gestionnaire de disposition de la variable ViewGroup
utilisée.
Eh bien, Android_layout: height spécifie la hauteur de base de la vue alors qu'Android: height spécifie la hauteur de l'objet (par exemple, le bouton dans le xml).
Bonne chance! :)
En jouant un peu avec cela, je pense que layout_height
est flexible - une hauteur préférée mais continuera à être agrandi/réduit avec le contenu - et height
est une valeur définie.
Ce qui se passe dans votre cas, c'est que TextView encapsule le texte Test
tout en utilisant l'attribut 48dp paddingTop
.
Android: height fait que la vue soit exactement de cette hauteur alors qu'Android: layout_height spécifie la hauteur de base de la vue.