Question Combinez layout_weight et maxWidth pour les vues


J'essaie de rendre mes mises en page plus conviviales pour le paysage, et un modèle commun est d'ajouter LinearLayout avec certains boutons (par exemple, OK | Annuler) et définissez une valeur pour layout_weight afin que l'espace soit uniformément distribué. Le problème est que lorsque vous utilisez un téléphone ou (surtout) une tablette en mode paysage, vous vous retrouvez avec d’immenses boutons qui ont l’air ridicule. J'ai essayé le réglage maxWidth sur les boutons et sur la mise en page linéaire mais en vain. Quelle serait la manière la plus simple d'y parvenir? À savoir, définir une taille horizontale maximale pour la vue afin qu'elle ne dépasse pas toute la largeur. J'ai essayé un tas de choses différentes, mais aucune n'a fonctionné.

Voici un exemple de mise en page:

    <LinearLayout 
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:gravity="center_horizontal"
      android:paddingLeft="10dp"
      android:paddingRight="10dp"
      android:paddingTop="6dp"
      android:paddingBottom="6dp">
      <Button 
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:enabled="false"
        android:textStyle="bold"
        android:text="@string/button1" />
      <Button 
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="@string/button2" />
    </LinearLayout>

Note: Je sais que je peux créer un nouveau fichier de mise en page pour le paysage et y faire de la magie. Je veux garder les fichiers de mise en page spécialisés au minimum, et j'espère que cela ne les nécessite pas.


11
2018-06-08 20:34


origine


Réponses:


Je n'ai pas Eclipse ici pour le tester, mais j'utiliserais plutôt un RelativeLayout, quelque chose comme:

<RelativeLayout
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  >
  <View
    android:id="@+id/centerView"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp"
    />
  <Button 
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toLeftOf="@id/centerView"
    android:enabled="false"
    android:textStyle="bold"
    android:text="@string/button1" 
    />
  <Button 
    android:id="@+id/button2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@id/centerView"
    android:text="@string/button2" 
    />
</RelativeLayout>

Comme je l'ai dit, je ne peux pas le tester maintenant, mais vous pouvez contourner cette idée.

Sur une note de côté, à moins que votre mise en page soit très simple, je crée généralement des dispositions distinctes pour le paysage. C'est un peu plus de travail, mais vous pouvez optimiser les vues beaucoup mieux. En particulier, si vous envisagez de prendre en charge des écrans plus grands.


0
2018-06-08 20:58



Après avoir joué un peu avec les mises en page relatives, je suis tombé sur cette réponse, c'est ce que j'ai fini par utiliser.


1
2018-06-08 23:02



<RelativeLayout
   android:id="@+id/rlMain"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:layout_marginLeft="12dp"
   android:layout_marginRight="12dp">

    <View
      android:id="@+id/vCenter"
      android:layout_width="0dp"
      android:layout_height="0dp"
      android:layout_centerHorizontal="true"
      android:layout_marginRight="5dp"
      android:layout_marginLeft="5dp"/>

    <Button
     android:id="@+id/btnOne"
     android:layout_width="wrap_content"
     android:layout_height="40dp"
     android:layout_toLeftOf="@id/vCenter"
     <!--Change this for different widths-->
     android:minWidth="200dp"/>

    <Button
     android:id="@+id/btnTwo"
     android:layout_width="wrap_content"
     android:layout_height="40dp"
     android:layout_toRightOf="@id/vCenter"
     <!--Change this for different widths-->
     android:minWidth="200dp"/>
</RelativeLayout>

-1
2018-05-20 14:57