8
votes

Disposition de bouton Android - Obtenez deux boutons côte à côte sur l'écran entier

J'ai deux boutons que j'aimerais apparaître côte à côte horizontalement, mais ensemble, ils remplissent la longueur horizontale du téléphone. La hauteur est une teneur enrôle, c'est bien. Mon problème est maintenant que seul un seul bouton s'affiche (étirement sur l'écran).

Voici mon code XML: xxx


2 commentaires

Comment attendez-vous exactement que deux boutons apparaissent à l'écran, étant donné que vous avez spécifié un seul dans le XML? Créez-vous de manière dynamique le second et l'ajoutez-vous à la disposition linéaire?


J'ai édité le message pour la rendre lisible maintenant.


8 Réponses :


25
votes

Modifiez vos boutons XML pour inclure l'attribut layout_weight : xxx


1 commentaires

En plus de la réponse acceptée, je pense qu'il convient de souligner que la disposition linéaire qui enveloppe les deux boutons doit avoir l'option Android: Orientation = "horizontal" . Je suis lent et je n'ai pas attrapé cela au début.



5
votes
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
<Button
  android:id="@+id/button01"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content" 
  android:layout_below="@id/entry" 
  android:layout_alignParentLeft="true"
  android:layout_toLeftOf="@+id/space"/>
<TextView
  android:id="@+id/space"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content" 
  android:layout_centerHorizontal="true"/>
<Button
  android:id="@+id/button02"
  android:layout_toRightOf="@id/button01"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:layout_below="@id/entry" 
  android:layout_alignParentRight="true"/>  
</RelativeLayout>
Seems like you want two equal buttons, not wrapped content. I created a centered spacer using TextView, and relatively aligned to that. Left button to parent left and spacer, Right button to Left Button and parent right.

0 commentaires

0
votes

Votre exigence est

<LinearLayout 
   android:id="@+id/page_buttons"
   android:orientation="horizontal"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"

   >
   <Button
        android:id="@+id/prevButton"
        android:layout_width="0dp"
        android:weight="0.5"
        android:layout_height="wrap_content"
        android:text="Previous"
   /> 

   <Button
        android:id="@+id/nextButton"
        android:layout_width="0dp"
        android:weight="0.5"
        android:layout_height="wrap_content"
        android:text="Next"
   />


0 commentaires

0
votes
<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true"> 

    <TextView 
        android:text="@+id/SomeText" 
        android:id="@+id/TextView01" 
        android:layout_width="wrap_content" android:layout_height="wrap_content" /> 

    <LinearLayout 
        android:orientation="horizontal" 
        android:background="@android:drawable/bottom_bar" 
        android:paddingLeft="4.0dip" 
        android:paddingTop="5.0dip" 
        android:paddingRight="4.0dip" 
        android:paddingBottom="1.0dip" 
        android:layout_width="fill_parent" android:layout_height="wrap_content" 
        android:layout_below="@+id/TextView01"> 

        <Button 
            android:id="@+id/allow" 
            android:layout_width="0.0dip" android:layout_height="fill_parent" 
            android:text="Allow" 
            android:layout_weight="1.0" /> 

        <Button 
            android:id="@+id/deny" 
            android:layout_width="0.0dip" android:layout_height="fill_parent" 
            android:text="Deny" 
            android:layout_weight="1.0" /> 

    </LinearLayout> 
</RelativeLayout> 

0 commentaires

16
votes

Puisque personne n'explique pourquoi leurs solutions fonctionnent, je vais y aller.

Le problème réside dans la mise en page des boutons. Les deux attributs concernés sont layout_width et layout_weight.

Dans d'autres systèmes de mise en page, lorsque vous indiquez que chaque élément d'une mise en page doit remplir le parent (Layout_width = "Fill_Parent"), ils le font en distribuant également l'espace du parent entre eux. Donc, chacun d'entre eux aurait la même taille.

Au lieu de cela, dans le système de mise en page d'Android, si les deux éléments ont Layout_width = "Fill_Parent" Le premier élément (dans votre cas, le Bouton de prévisualisation) sera étiré pour remplir le parent et la seconde (ou troisièmement, ou etc.) n'auront plus d'espace pour distribuer, de sorte qu'il ne sera pas visible.

Maintenant, pour que cela comprenne que vous souhaitez que les deux boutons affichent, vous définissez le poids de layout_weight pour chaque bouton. Pour que les boutons ont la même taille, définissez le même poids de mise en page sur eux.

Le poids de layout_Port définit le nombre de "parties" (ou segments) du parent chacun des boutons occupant. Le parent sera réduit dans un certain nombre de segments égaux à la somme des segments des enfants. Si vous souhaitez effectuer un bouton trois fois plus gros, vous devez l'affecter le nombre de parties égales au nombre de parties du premier bouton, multipliée par trois.

Donc, si vous voulez que votre prochain bouton soit deux fois plus grand, alors le Bouton Aperçu, vous pouvez le faire:

  • pour le bouton Aperçus: Layout_weight = 1
  • pour le bouton Suivant: Layout_weight = 2

    En conséquence, le parent sera coupé en 3 parties, dont 2 sera attribué au bouton Suivant et 1 au bouton Aperçu.

    L'exemple pris ici est pour les boutons et la disposition horizontale, mais cela fonctionnera simplement pour tout type d'objet et également pour la mise en page verticale.


1 commentaires

Merci beaucoup pour l'explication



1
votes

Le parent de votre bouton est la disposition linéaire et vous définissez la largeur du bouton comme remplissage parent et que cela prend tout l'espace. Vous avez deux options pour implémenter cela ...

  1. Donnez la largeur fixe pour votre bouton (p. Ex. 50DIP).
  2. Donnez la largeur sous forme de 0 dP et insérez un attribut de plus dans les deux boutons "Poids" et donnez 0.5DIP pour chaque ...

0 commentaires

1
votes

Les deux boutons doivent être sur une linearlayout. La disposition linéaire doit être horizontale et chaque bouton a un poids de 1. Cela devrait vous donner deux boutons avec une taille égale le long de la largeur de l'écran. Un échantillon est ici Orientation horizontale: Vérifiez les 2 boutons de la fin de cette mise en page XML


0 commentaires

0
votes

J'ai trouvé le premier problème pour les personnes qui ne semble toujours pas avoir ce qu'ils veulent. Lorsque vous utilisez des boutons avec leur arrière-plan conventionnel (hors de la boîte / défaut), il a une marge intégrée. Si vous essayez de changer le fond manuellement avec une seule couleur, vous pouvez vous dire facilement que vous devez simplement définir un arrière-plan séparé. autre que lorsque vous avez les poids mis en place, cela fonctionnera.


0 commentaires