web-dev-qa-db-fra.com

Poids Layout Android

Je suis nouveau dans le développement Android et j'ai une question à propos de la définition du poids dans une mise en page linéaire. 

J'essaie de créer une ligne avec deux boutons personnalisés et un texte d'édition personnalisé. Le texte modifié ne doit occuper que la quantité de place requise et les deux boutons doivent se développer horizontalement pour occuper le reste de l'espace disponible dans la ligne. Comme ça...

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

Après plusieurs tentatives, je peux me rapprocher de ce que je veux, même si cela semble trop 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>

Si je comprends bien, le réglage [Android: layout_weight = "2"] pour les dispositions linéaires contenant les boutons devrait leur faire occuper plus de place que le texte de modification, mais il en va tout autrement pour moi, en les réduisant de moitié.

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

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

84
UnluckyDevil

Cela ne fonctionne pas car vous utilisez fill_parent comme largeur. Le poids sert à répartir l’espace vide restant ou à supprimer l’espace lorsque la somme totale est supérieure à LinearLayout. Réglez vos largeurs sur 0dip à la place et cela fonctionnera.

212
Romain Guy

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 ça:

<Button>

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

-----other parameters
</Button>
14
learn_andrd

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

Si vous avez 3 boutons et que leur poids est 1,3,1 en conséquence, cela fonctionnera comme dans HTML

Fournissez 5 portions pour cette ligne: 1 portion pour le bouton 1, 3 portions pour le bouton 2 et 1 portion pour le bouton 1

7
George Nguyen

Dans linearLayout, définissez WeightSum = 2;

Et distribuez le poids à ses enfants comme vous le souhaitez. J'ai donné du poids = "1" à l'enfant. Ainsi, les deux vont distribuer 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>
3
Xar E Ahmer

valeurs de pondération 0-1 partage la répartition de l'espace disponible (après avoir défini layout_width = "0px") proportionnellement à la valeur de pondération. Les éléments de vue avec un poids non spécifié (aucune entrée de poids) ont un poids égal à 0, ce qui signifie qu'ils ne subissent aucune expansion.

Une alternative simple ne nécessitant aucune entrée de poids consiste à associer Marquee à une vue contenant du texte Elle lui demande de passer du minimum requis pour le texte (wrap_content) à l'espace disponible. Android: layout_width = "wrap_content" Android: ellipsize = "Marquee"

2
JDPearlman

Une raison de plus que j'ai trouvée (aussi vague que cela puisse paraître). Le ci-dessous n'a pas fonctionné.

LinearLayout vertical

LinearLayout height fillparent + weight

LinearLayout height fillparent + weight

LinearLayout height fillparent + weight

EndLinearLayout

Qu'est-ce que le travail était

Disposition relative

LinearLayout vertical

LinearLayout height fillparent + weight

LinearLayout height fillparent + weight

LinearLayout height fillparent + weight

EndLinearLayout

EndRelativeLayout

Cela semble vague par une mise en page racine avec linéaire et les poids en dessous ne fonctionnaient pas. Et quand je dis "n'a pas fonctionné", je veux dire qu'après avoir visualisé la mise en page graphique entre différentes résolutions, la cohérence de l'écran a éclaté.

0
Siddharth
<LinearLayout
    Android:id="@+id/linear1"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:weightSum="9"
    Android:orientation="horizontal" >

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

    <ImageView
        Android:id="@+id/maila_oss"
        Android:layout_width="0dp"
        Android:layout_height="wrap_content"
        Android:layout_weight="3"
        Android:src="@drawable/maila_oss" />
<EditText
        Android:id="@+id/edittxt"
        Android:layout_width="0dp"
        Android:layout_height="wrap_content"
        Android:layout_weight="3"
        Android:src="@drawable/maila_oss" />
</LinearLayout>
0
Devendra Shah

je supposerais de régler la largeur de EditTexts sur wrap_content et de placer les deux boutons dans un LinearLayout dont la largeur est fill_parent et le poids défini sur 1. 

0
Jonathan Roth