J'ai une disposition linéaire (orientée horizontalement) qui contient 3 boutons. Je veux que les 3 boutons aient une largeur fixe et soient répartis uniformément sur toute la largeur de la disposition linéaire.
Je peux gérer cela en définissant la gravité de la disposition linéaire au centre, puis en ajustant le rembourrage des boutons, mais cela fonctionne pour une largeur fixe et ne fonctionnera pas pour changer les appareils ou les orientations.
<LinearLayout android:id="@+id/LinearLayout01"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:gravity="center">
<Button
android:id="@+id/btnOne"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="120dip"></Button>
<Button
android:id="@+id/btnTwo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="120dip"></Button>
<Button
android:id="@+id/btnThree"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="120dip"></Button>
</LinearLayout>
android
android-linearlayout
yamspog
la source
la source
Réponses:
L' expansion sur la réponse de Fedj , si vous définissez
layout_width
à0dp
et définir lalayout_weight
pour chacun des boutons à 1, la largeur disponible sera partagé à parts égales entre les boutons.la source
Si vous ne voulez pas que les boutons soient mis à l'échelle, mais ajustez l'espacement entre les boutons (espacement égal entre tous les boutons), vous pouvez utiliser des vues avec weight = "1" qui rempliront l'espace entre les boutons:
la source
Space
type d'affichage. Rend les choses un peu plus lisibles.Vous pouvez l'utiliser avec comme suit.
la source
Space
tout à l'heureVous pouvez le faire en donnant à la fois
View
salayout_width
de0dp
et unlayout_weight
de1
:La façon dont android layout_weight fonctionne est la suivante:
match_parent
alors elle divisera l' espace qui reste dans le rapport dulayout_weight
s. Ainsi, si vous avez donné les vueslayout_weight="2"
etlayout_weight="1"
, le rapport résultant sera de 2 à 1, c'est-à-dire: la première vue obtiendra 2/3 de l'espace qui reste et l'autre vue 1/3.C'est pourquoi, si vous donnez
layout_width
une taille à0dp
la première étape, cela n'a aucune signification supplémentaire, car aucun espace n'est attribué aux deux vues. Ensuite, seul le deuxième point décide de l'espace que chacunView
obtient, ce qui donne auView
s l'espace que vous avez spécifié en fonction du rapport!Pour expliquer pourquoi
0dp
l'espace se divise également en fournissant un exemple qui montre le contraire: Le code ci-dessous entraînerait quelque chose de différent car aexample text
maintenant une largeur qui est plus grande que0dp
parce qu'il awrap_content
à la place de laisser l'espace libre restant à diviser inférieur à 100% parce que le texte prend de la place. Le résultat sera qu'ils obtiennent 50% de l'espace libre restant mais le texte a déjà pris un peu d'espace doncTextView
il aura bien plus de 50% de l'espace total.la source
Eh bien, si vous avez exactement 3 boutons et s'il est correct (ou même prévu) que les boutons extérieurs soient alignés sur le côté gauche et droit, vous voudrez peut-être essayer un RelativeLayout qui est moins frais généraux (dans de nombreuses situations).
Vous pouvez utiliser
layout_alignParentBottom
pour aligner tous les boutons avec le bas de la mise en page. Utilisezlayout_alignParentLeft and Right
pour les boutons extérieurs etlayout_centerHorizontal
pour le bouton du milieu.Cela fonctionnera bien sur différentes orientations et tailles d'écran.
la source
Vous devriez jeter un œil à l'attribut android: layout_weight
la source
La solution moderne pour cela est Flexbox .
Assurez-vous d'importer
implementation 'com.google.android:flexbox:2.0.0'
Flexbox
est beaucoup plus puissant; c'est un bon complément àConstraintLayout
. Ceci est une excellente ressource pour en savoir plus.la source
Pour espacer uniformément deux boutons dans une disposition linéaire horizontale, j'ai utilisé 3 objets LinearLayout pour agir comme des espaces qui seront automatiquement redimensionnés. J'ai positionné ces objets LinearLayout comme suit:
[] Bouton1 [] Bouton2 []
([] représente un objet LinearLayout utilisé pour l'espacement)
puis je règle chacun des poids de ces objets [] LinearLayout à 1, et j'obtiens des boutons régulièrement espacés.
J'espère que cela t'aides.
la source
j'ai créé un View DistributeLayout personnalisé pour ce faire.
la source
Je vous suggère d'utiliser l'attribut weightSum de LinearLayout.
L'ajout de la balise
android:weightSum="3"
à la déclaration xml de votre LinearLayout, puisandroid:layout_weight="1"
à vos boutons entraînera une répartition uniforme des 3 boutons.la source
Ceci peut être réalisé en attribuant
weight
à chaque bouton ajouté à l'intérieur du conteneur, très important pour définir l'orientation horizontale:afin que nous puissions obtenir cela dans notre appareil:
même si nous faisons tourner notre appareil, le
weight
défini dans chaque bouton peut répartir uniformément les éléments le long du conteneur:la source
La meilleure approche consiste à utiliser TableLayout avec android: layout_width = "match_parent" et dans les colonnes, utilisez android: layout_weight = "1" pour toutes les colonnes
la source
Les réponses ci-dessus utilisant layout_did ne fonctionnaient pas pour moi, mais les suivantes ont fonctionné.
Voilà à quoi ça ressemble à l'écran,
la source
Avant tout, les réponses sont bonnes, mais dans le cas où vous avez besoin de fonctionnalités visibles et disparues, cette méthode pragmatique fonctionnera bien
la source
Enfants de poids égal
Pour que cela fonctionne dans le
LinearLayout
groupe de vues, les valeurs d'attributandroid:layout_width
etandroid:layout_height
doivent être égales à"match_parent"
...la source
En cercle, Tom, Tim et Todd sont supposés mesurer 3 centimètres. Si vous voulez que ce soit un écran tactile, mettez-le comme Tom et Tim supposés être de 1 centimètre, ce qui signifie qu'ils combinent virtuel mais son plan 2D est en bas. Ceci est affiché à l'écran.
la source
la source
Le moyen le plus simple et le plus rapide (mais pas le meilleur) consiste à ajouter un TextView avec un attribut de texte vide, comme celui-ci
la couleur d'arrière-plan doit être la même au LinearLayout, alors vous pouvez utiliser la propriété padding, comme ceci
ou tout ce dont vous avez besoin. Voici un exemple.
la source