84 votes

Poids de la mise en page Android

Je suis nouveau dans le développement Android et j'ai une question sur le réglage du poids dans une disposition linéaire.

J'essaie de créer une ligne avec deux boutons personnalisés et un texte d'édition personnalisé. Le texte d'édition ne doit occuper que l'espace correspondant à son contenu, et les deux boutons doivent s'étendre horizontalement pour occuper le reste de l'espace disponible dans la rangée. Comme ceci...

| [#Button++#] [#Button--#] [et] |

Après plusieurs tentatives, c'est ce qui se rapproche le plus de ce que je veux, même si cela semble excessivement compliqué.

| [Button] [Button] [###ET###] |

<LinearLayout 
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal|center_vertical"
    android:layout_weight="1"
    >

    <LinearLayout 
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center_horizontal|center_vertical"
        >
        <RelativeLayout 
            android:id="@+id/btn_plus_container" 
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content"
            >
            <ImageButton 
                android:layout_height="wrap_content"
                android:layout_width="fill_parent" 
                android:id="@+id/btn_plus" 
                android:background="@drawable/btn"
                android:layout_centerInParent="true"
                ></ImageButton>
            <TextView 
                android:textColor="#FAFAF4"
                android:id="@+id/tv_dice_plus" 
                android:text="@string/tv_plus" 
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                ></TextView>
        </RelativeLayout>
    </LinearLayout>
    <LinearLayout 
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center_horizontal|center_vertical"
        >
        <RelativeLayout 
            android:id="@+id/btn_minus_container" 
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content"
            >
            <ImageButton 
                android:layout_height="wrap_content"
                android:layout_width="fill_parent" 
                android:id="@+id/btn_minus" 
                android:background="@drawable/btn"
                android:layout_centerInParent="true"
                ></ImageButton>
            <TextView 
                android:textColor="#FAFAF4"
                android:id="@+id/btn_minus" 
                android:text="@string/tv_minus" 
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                ></TextView>
        </RelativeLayout>
    </LinearLayout>
    <LinearLayout 
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center_horizontal|center_vertical"
        >
        <EditText 
            android:textColor="#FAFAF4"
            android:text="@string/et_output" 
            android:id="@+id/et_output" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:inputType="number"
            android:selectAllOnFocus="true" 
            android:minWidth="50sp"         
            android:maxWidth="50sp"
            android:background="@drawable/tv_black_background3"
            android:textColorHighlight="#c30505"
            ></EditText>
    </LinearLayout>
</LinearLayout>

D'après ce que j'ai compris, le paramétrage de [Android:layout_weight="2"] pour les mises en page linéaires contenant les boutons devrait leur faire occuper plus de place que le texte à modifier, mais c'est l'inverse qui se produit pour moi, les rendant deux fois plus petits.

| [Btn] [Btn] [#####et#####] |

J'ai essayé tellement de combinaisons différentes que je ne peux même pas m'en souvenir, et aucune n'a fonctionné.

213voto

Romain Guy Points 57114

Cela ne fonctionne pas car vous utilisez fill_parent comme largeur. Le poids est utilisé pour distribuer l'espace vide restant. ou enlève de l'espace lorsque la somme totale est plus grande que le LinearLayout. Définissez vos largeurs à 0dip à la place et cela fonctionnera.

14voto

learn_andrd Points 398

android:Layout_weight peut être utilisé lorsque vous n'attachez pas déjà une valeur fixe à votre largeur comme fill_parent etc.

Faites quelque chose comme ceci :

<Button>

Android:layout_width="0dp"
Android:layout_weight=1

-----other parameters
</Button>

7voto

George Nguyen Points 1025

Pensez-y de cette façon, ce sera plus simple

Si vous avez 3 boutons et que leur poids est de 1,3,1, cela fonctionnera comme un tableau en HTML.

Prévoir 5 portions pour cette ligne : 1 portion pour le bouton 1, 3 portions pour le bouton 2 et 1 portion pour le bouton 1

3voto

Nepster Points 893

Dans le linearLayout, définissez le WeightSum=2 ;

Et distribuer le poids à ses enfants comme vous voulez qu'ils l'affichent J'ai donné le poids = "1" à l'enfant, donc les deux distribueront la moitié du total.

 <LinearLayout
    android:id="@+id/linear1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:weightSum="2"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/ring_oss"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:src="@drawable/ring_oss" />

    <ImageView
        android:id="@+id/maila_oss"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:src="@drawable/maila_oss" />
</LinearLayout>

2voto

JDPearlman Points 21

Les valeurs de poids 0-1 partagent la distribution de l'espace disponible (après avoir défini layout_width="0px") proportionnellement à la valeur du poids. Les éléments de vue dont le poids n'est pas spécifié (aucune entrée de poids) ont un poids de 0, ce qui signifie qu'ils ne sont pas étendus.

Une alternative simple qui ne nécessite pas d'entrées de poids est d'attacher le marquee à une vue avec du texte qui lui demande de s'étendre du minimum nécessaire pour le texte (wrap_content) à l'espace disponible. EditText : Android:layout_width="wrap_content" (en anglais) Android:ellipsize="marquee"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X