web-dev-qa-db-fra.com

Pourquoi ne devrais-je pas définir layout_width et layout_height dans un style?

Si de nombreux TextViews servent d'étiquettes d'élément, je pensais pouvoir extraire tout ce qui est commun à leur sujet dans un style et utiliser uniquement la mise en page.

<TextView style="@style/label" Android:text="Foo"/>
<TextView style="@style/label" Android:text="Bar"/>

avec style comme:

<style name="label">
    <item name="Android:layout_width">wrap_content</item>
    <item name="Android:layout_height">wrap_content</item>
</style>

Mais lorsque je fais cela, cela fonctionne correctement sur l'émulateur et le périphérique, mais l'éditeur XML d'Android se plaint que "<TextView>" does not set the required layout_height attribute. Y a-t-il une raison pour laquelle il signale cet avertissement?

27
Axarydax

Avez-vous essayé de nettoyer le projet?

J'utilise également la même chose sur certains fichiers XML pour la largeur et la longueur. Voici un exemple fonctionnant sur mon application, vous pouvez voir:

<TextView
    Android:id="@+id/viewdescription"
    Android:textIsSelectable="true"
    Android:layout_below="@+id/rating_bar_view"
    Android:minLines="8"
    style="@style/description" />

Et le XML:

<style name="description">
   <item name="Android:layout_gravity">center_horizontal</item>
   <item name="Android:inputType">textMultiLine</item>
   <item name="Android:layout_width">fill_parent</item>
   <item name="Android:layout_height">wrap_content</item>     
   <item name="Android:textSize">14sp</item>
   <item name="Android:textColor">@color/Black</item>
   <item name="Android:layout_marginRight">8dp</item>
   <item name="Android:layout_marginLeft">8dp</item>

10
Yoann Hercouet

Après une tentativeBuild > Clean Project, je rencontrais toujours le même problème dans l'éditeur de disposition; un redémarrage complet de mon IDE a résolu le problème pour moi.

3
jterry

J'ai essayé cela, ça marche juste bien ..

 <EditText
        Android:id="@+id/edt_mobile_no"
        style="@style/login_input_fields"
        Android:hint="@string/hint_mobile"
        Android:inputType="phone" />

Ci-dessous le style pour le EditText

<style name="login_input_fields">
    <item name="Android:layout_width">match_parent</item>
    <item name="Android:layout_height">40dp</item>
    <item name="Android:layout_marginBottom">10dp</item>
    <item name="Android:background">@drawable/bg_curved_white_border</item>
    <item name="Android:paddingRight">10dp</item>
    <item name="Android:paddingLeft">10dp</item>
    <item name="Android:textColor">@Android:color/white</item>
    <item name="Android:textColorHint">@color/underline</item>
    <item name="Android:textSize">16sp</item>
    <item name="Android:typeface">monospace</item>
</style>
1
Raja Jawahar

Vieux sujet mais quand même :)

Je ne pense pas que définir une largeur et une hauteur de style soit une bonne idée. Fondamentalement, il compile et fonctionne normalement, mais j’ai connu des situations avec des mises en page plus complexes, y compris, etc., où il posait problème. Et quand on y réfléchit, cela n’a pas vraiment de sens de le mettre là.

Vous pouvez facilement utiliser @dimen si vous voulez différentes valeurs pour différentes dispositions. Et cela peut aussi être assez surprenant pour quelqu'un d'autre qui utilise votre style. Vous souhaitez généralement définir la couleur, la taille et le comportement avec style, mais la taille ne fait pas partie des choses.

Vous ne savez jamais dans quel contexte votre style va être utilisé. C'est juste une de ces choses puantes qui, lorsque vous voyez, vous commencez à avoir le sentiment que quelque chose aurait pu être mieux fait.

0
bio007