2012-07-26 3 views
34

Ich mag würde drei Tasten unter gleicher Menge verfügbaren Raum horizontal in einer Reihe haben. Ich verwendete android:layout_gravity. Was ist das Problem?Place 3 Tasten in einer Linearlayout gleiche Menge von Raum zu besetzen

Layout xml:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:weightSum="1.0" 
    > 

    <Button android:id="@+id/button" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/Bg" 
      android:background="@drawable/button_red" 
      android:layout_weight=".2" 
      android:layout_gravity="left" 
    /> 
    <Button android:id="@+id/button" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/Bm" 
      android:background="@drawable/button_red" 
      android:layout_weight=".2" 
      android:textColor="#ffffff" 
      android:layout_gravity="center" 
    /> 

    <Button 
     android:id="@+id/button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@drawable/button_red" 
     android:layout_weight=".2" 
     android:text="@string/Bf" 
     android:layout_gravity="right" 
    /> 

</LinearLayout> 

wenn jemand sehen, was ist falsch, danke.

+2

und stellen Sie sicher, dass Sie verschiedene ID-Tasten geben .. – Ronnie

Antwort

88

Das folgende Layout funktionieren sollte. Gewichte sind für LinearLayouts ..

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:orientation="horizontal" 
android:weightSum="3" 
> 

    <Button android:id="@+id/button1" 
      ... 
      android:layout_weight="1"/> 

    <Button android:id="@+id/button2" 
      ... 
      android:layout_weight="1"/> 

    <Button 
     android:id="@+id/button3" 
     ... 
     android:layout_weight="1"/> 

</LinearLayout> 
+0

Toll das, was ich will – user1527152

+0

PERFECT LOGIC! Lernen Sie eine neue Sache heute –

+0

Sie sind mein Lebensretter Kumpel, verbrachte ich 4 Stunden, um herauszufinden, wie man das. Danke! –

0

Setzen Sie die Tasten in einem relativen Layout. Fügen Sie Eigenschaften zu den Schaltflächen allignParentleft = true, einem anderen allignParentcenter = true und allignParentRight = true für jede Schaltfläche hinzu.

+0

allignParentcenter nicht nur Recht existiert und links ... – user1527152

+0

Leider diese versuchen, auf die mittlere Taste android : layout_centerInParent = "Wahr". – ShineDown

+0

Das wird sie in einer Reihe ausrichten, aber es wird ihnen nicht alles machen nehmen den Raum zur Verfügung und jede Taste gleich groß machen – banzai86

1

Check out this:

<RelativeLayout 
    android:id="@+id/layout" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true"/> 
    <RelativeLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true"> 
     <Button 
      android:id="@+id/button2" 
      android:layout_width="0dp" 
      android:layout_weight="1" 
      android:layout_height="wrap_content" 
      android:layout_toRightOf="@+id/button1"/> 
    </RelativeLayout> 
    <Button 
     android:id="@+id/button3" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true"/> 
</RelativeLayout> 
+0

@DownVoter Sie dieses Layout versucht haben, bevor Downvoting ?? – AkashG

+0

Duh .. Ich bin nicht der Downvoter. Aber ich denke, er hat das getan, weil Sie eine Idee basierend auf RelativeLayout geliefert haben, aber die Frage war, es mit Linear Layout zu lösen.Klingt das nicht als Grund für den Downvote? –

+0

@AndroSelva mit linearem Layout können Sie 3 drei Tasten linear einstellen, aber wenn sich die Bildschirmgröße ändert, wird es nicht in einer Weise bleiben, die in der Mitte des Bildschirms sein wird. Durch relatives Layout können Sie für alle Bildschirmauflösungen beibehalten. – AkashG

2

Teilen Sie die Gewichtssumme zu gleichen Teilen in allen Knöpfen.

Entfernen layout_gravity Immobilien und fügen android: layout_weight = 0,33.

Es funktioniert

+0

Es ist, was ich suche, aber wir können auf der rechten Seite einige Pixel sehen. Ich weiß nicht, wie ich das erklären soll, aber das nehme nur 99% des Elternteils. ich bin mir nicht sicher, ob ich das richtig erkläre – user1527152

+1

Ändere die Gesamtsumme auf 3 und dividiere zwischen den Tasten auf 1. – moDev

+1

OH yeah warum ich das nicht vor -_- "Du rettest mir viel Dank. Ich war auf der Suche nach einer Lösung für eine Stunde – user1527152

12

neben der eine layout_weight Einstellung layout_width oder layout_height zu 0dp setzen müssen. Also, wenn Sie zum Beispiel will horizontal um die Tasten zu verteilen, sollte layout_width 0DP und layout_weight 0,2 oder eine beliebige Zahl sein, solange Sie haben über die Tasten gleich ist.

so sollte Ihr Layout wie diese

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:orientation="horizontal" 
> 

<Button android:id="@+id/button" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:text="@string/Bg" 
     android:background="@drawable/button_red" 
     android:layout_weight="1" 
/> 
<Button android:id="@+id/button" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:text="@string/Bm" 
     android:background="@drawable/button_red" 
     android:layout_weight="1" 
     android:textColor="#ffffff" 
/> 

<Button 
    android:id="@+id/button" 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:background="@drawable/button_red" 
    android:layout_weight="1" 
    android:text="@string/Bf" 
/> 
</LinearLayout> 
-1

sind Sie es wie folgt aufteilen: `

  <RelativeLayout 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignParentLeft="true" 
       android:layout_alignParentStart="true" 
       android:layout_centerVertical="true" 
       android:layout_toLeftOf="@+id/imageButtonLikedPost"> 

       <ImageButton 
        android:id="@+id/imageButtonMyPost" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_centerHorizontal="true" 
        android:layout_centerVertical="true" 
        android:background="@drawable/mypost_tab_bg" /> 
      </RelativeLayout> 

      <ImageButton 
       android:id="@+id/imageButtonLikedPost" 
       android:layout_width="40dp" 
       android:layout_height="30dp" 
       android:layout_centerHorizontal="true" 
       android:layout_centerVertical="true" 
       android:background="@drawable/mylike_tab_bg" /> 

      <RelativeLayout 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignParentEnd="true" 
       android:layout_alignParentRight="true" 
       android:layout_centerVertical="true" 
       android:layout_toRightOf="@+id/imageButtonLikedPost"> 

       <ImageButton 
        android:id="@+id/imageButtonMyBlog" 
        android:layout_width="30dp" 
        android:layout_height="30dp" 
        android:layout_centerHorizontal="true" 
        android:layout_centerVertical="true" 
        android:background="@drawable/tab4_bg" /> 
      </RelativeLayout> 
     </RelativeLayout>` 
+0

Hallo stört es Ihnen, Ihre Antwort zu erklären? Sie verwenden RelativeLayout, wenn die Frage für LinearLayout fragen.Ich habe Ihre Lösung nicht getestet, aber die Frage für gleiche Breite und eine Ihrer Schaltfläche ist 40dp und eine andere 30dp. Kannst du das auch erklären – user1527152

0

Bitte beachten Sie den folgenden Layout-Schnipsel:

<LinearLayout 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:weightSum="3"> 

    <ImageView 
     android:src="@drawable/logo1" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:layout_gravity="left|center_vertical" /> 

    <TextView 
     android:id="@+id/toolbar_title" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:text="Some Title" 
     android:textColor="@android:color/black" 
     android:layout_gravity="center" 
     android:gravity="center" 
     android:layout_weight="1" /> 

    <ImageView 
     android:src="@drawable/logo2" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:layout_gravity="right|center_vertical" /> 

</LinearLayout> 

2 Dinge oben zu beachten.

A. habe ich ein Linearlayout mit weightSum von 3.

B. Dann im Inneren, dass ich schaffen 3 Elemente mit jeweils layout_weight von 1, so dass ich mein Kind-Elemente haben den gesamten Raum unter sich gleichmäßig verteilen.

0

habe ich es ohne Gewicht pragmatisch machen

float width = CommonUtills.getScreenWidth(activity); 
    int cardWidth = (int) CommonUtills.convertDpToPixel(((width)/3), activity); 

    LinearLayout.LayoutParams params = 
     new LinearLayout.LayoutParams(cardWidth, 
      LinearLayout.LayoutParams.MATCH_PARENT); 

    btnOne.setLayoutParams(params); 
    btnTwo.setLayoutParams(params); 
    btnThree.setLayoutParams(params); 

    public class CommonUtills { 
     public static float getScreenWidth(Context context) { 
      float width = (float) 360.0; 
      DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics(); 
      width = displayMetrics.widthPixels/displayMetrics.density; 
      return width; 
     } 
    } 



    <LinearLayout 
    android: layout_width = "match_parent" 
    android: layout_height = "50dp"  
    android: orientation = "horizontal" > 


     <Button 
    android: id = "@+id/btnOne" 
    android: layout_width = "wrap_content" 
    android: layout_height = "match_parent" > </Button> 


     <Button 
    android: id = "@+id/btnTwo" 
    android: layout_width = "wrap_content" 
    android: layout_height = "wrap_content" > </Button> 



     <Button 
    android: id = "@+id/btnThree" 
    android: layout_width = "wrap_content" 
    android: layout_height = "wrap_content" > </Button> 
     </LinearLayout> 
+0

Hast du deine Lösung versucht? Wenn "Breite" kein Vielfaches von drei ist, dann wird es eine Erinnerung geben er kann die Knöpfe versetzen. Auch die verbleibenden Pixel sind schwarz und wahrscheinlich wahrnehmbar. – user1527152

+0

Ich hatte es mit sechs Tasten versucht und es funktioniert sowohl im Querformat als auch im Hochformat. Auch habe ich in vielen Geräten eingecheckt und es funktioniert gut, wenn Sie Kartenansicht außerhalb jeder Taste, dann sieht es sehr gut –

+0

Ich habe keine pixelbezogenen Problem gefunden –

Verwandte Themen