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):

  1. quelle est la différence entre eux?
  2. Quand faut-il utiliser l'un plutôt que l'autre?
  3. l'utilisation de l'un affecte l'utilisation de l'autre?
  4. 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

26
demandé sur Martin 2013-06-30 17:53:56

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é.

18
répondu Martin 2017-05-23 11:46:23

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.

0
répondu James Williams 2013-06-30 17:30:22

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! :)

0
répondu tash 2013-08-09 15:06:55

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.

0
répondu Pradeep 2013-10-18 13:35:26