2013-06-04 9 views
5

Mam układ podobny do kalkulatora, 4 przyciski w każdym rzędzie, z 5 rzędami. Stworzyłem te wiersze, używając LinearLayout. Udało mi się całkowicie wypełnić szerokość każdego wiersza, używając android:layout_weight="1" w każdym przycisku w LinearLayout. Ale nie wiem, jak wypełnić przestrzeń pionową w ten sposób. Po pięciu rzędach istnieje przestrzeń pozostała na dnie dla zwykłych ekranów XDPI (Nexus 4)Jak równomiernie rozłożyć przyciski/układy w pionie w systemie Android?

<LinearLayout 
     android:id="@+id/first_row" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/entry"> 

    <Button 
      android:id="@+id/seven" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:text="7" 
      android:textColor="@color/Blue_ICS" 
      android:textSize="@dimen/button_text_size" 
      /> 

    <Button 
      android:id="@+id/eight" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:text="8" 
      android:textColor="@color/Blue_ICS" 

      android:textSize="@dimen/button_text_size"/> 

    <Button 
      android:id="@+id/nine" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:text="9" 

      android:textColor="@color/Blue_ICS" 
      android:textSize="@dimen/button_text_size"/> 

    <Button 
      android:id="@+id/plus" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:text="+" 
      android:textColor="@color/Blue_ICS" 
      android:textSize="@dimen/button_text_size"/> 
</LinearLayout> 

Układ jest zbyt długi, więc dzielę się tutaj kod tylko z pierwszego rzędu, pozostałe wiersze są takie same też.

+0

Czy chcesz wypełnić swoje wiersze równą wysokością? –

+0

Czy próbowałeś zmienić atrybut wysokości 'LinearLayout' ?:' android: layout_height = "match_parent" ' –

+0

check out [this link] (http://stackoverflow.com/a/8105131/2345913) – CRUSADER

Odpowiedz

7

Należy użyć TableLayout, zastępując wszystkie swoje LinearLayout dla TableRow. Atrybut "stretchColumns" pozwala tworzyć wszystkie kolumny o tej samej szerokości bez konieczności stosowania ciężaru. W ten sposób można wykorzystać wagę do obsługi wysokości TableRow.

W poniższym przykładzie dodałem trochę miejsca (pusty LinearLayout), aby wyświetlić wyniki, takie jak ekran kalkulatora. Mam nadzieję, że tego właśnie szukasz! (Będziesz musiał zmienić identyfikatory)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/outerLayout" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" > 

<LinearLayout 
    android:id="@+id/screenLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="150dp" 
    android:orientation="vertical"></LinearLayout> 

<TableLayout 
    android:id="@+id/myLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_below="@+id/screenLayout" 
    android:stretchColumns="*" > 

    <TableRow 
     android:id="@+id/first_row" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" > 

     <Button 
      android:id="@+id/seven" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:text="7" /> 

     <Button 
      android:id="@+id/eight" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:text="8" /> 

     <Button 
      android:id="@+id/nine" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:text="9" /> 

     <Button 
      android:id="@+id/plus" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:text="+" /> 
    </TableRow> 

    <TableRow 
     android:id="@+id/first_row" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" > 

     <Button 
      android:id="@+id/seven" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:text="4" /> 

     <Button 
      android:id="@+id/eight" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:text="5" /> 

     <Button 
      android:id="@+id/nine" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:text="6" /> 

     <Button 
      android:id="@+id/plus" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:text="-" /> 
    </TableRow> 

    <TableRow 
     android:id="@+id/first_row" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" > 

     <Button 
      android:id="@+id/seven" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:text="1" /> 

     <Button 
      android:id="@+id/eight" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:text="2" /> 

     <Button 
      android:id="@+id/nine" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:text="3" /> 

     <Button 
      android:id="@+id/plus" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:text="*" /> 
    </TableRow> 

    <TableRow 
     android:id="@+id/first_row" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" > 

     <Button 
      android:id="@+id/seven" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:text="0" /> 

     <Button 
      android:id="@+id/eight" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:text="," /> 

     <Button 
      android:id="@+id/nine" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:text="/" /> 

     <Button 
      android:id="@+id/plus" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:text="=" /> 
    </TableRow> 
</TableLayout> 

</RelativeLayout> 

Wynik:

enter image description here

+0

Tak, to pomoże w równym rozłożeniu całego układu. Dzięki – Vins

+0

Cieszę się, że mogę Ci pomóc! :) –

2

Jeśli Twój rodzic jest również LinearLayout, możesz również użyć android:layout_weight="1" w swoich wierszach.

<!--parent--> 
<LinearLayout 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" 
    android:orientation="vertical"> 

    <include 
     android:layout="@layout/myrow" 
     android:layout_height="0dp" 
     android:layout_width="match_parent" 
     android:layout_weight="1"/> 

    <include 
     android:layout="@layout/myrow" 
     android:layout_height="0dp" 
     android:layout_width="match_parent" 
     android:layout_weight="1"/> 

    <include 
     android:layout="@layout/myrow" 
     android:layout_height="0dp" 
     android:layout_width="match_parent" 
     android:layout_weight="1"/> 

    <include 
     android:layout="@layout/myrow" 
     android:layout_height="0dp" 
     android:layout_width="match_parent" 
     android:layout_weight="1"/> 

    <include 
     android:layout="@layout/myrow" 
     android:layout_height="0dp" 
     android:layout_width="match_parent" 
     android:layout_weight="1"/> 


</LinearLayout> 

Nie przetestowałem, ale powinno działać.

Nadzieja to pomaga

0

spróbuj tego:

<LinearLayout 
     android:id="@+id/first_row" 
     android:layout_width="fill_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1"> 
     ... 
    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/first_row" 
     android:layout_width="fill_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1"> 
     ... 
    </LinearLayout> 
    ... 

i tak dalej. Wrap wszystkich tych w układzie liniowym z orientacji pionowej

0

Można spróbować następujących ... (pseudokod) :(Mam nadzieję, że u zrozumieć logikę ... To działa .. rozciąga przycisk na dowolnej gęstości ekranu)

 <linearlayout=Outer 
      horizontal 
      weightSum=5> 
       <sub linearLayout=innerRow1 
        vertical 
        weightSum=1> 
        <enter all the buttons with weight as ".25"> 
       </sub innerRow1> 
       <sub linearLayout=innerRow2 
        vertical 
        weightSum=1> 
        <enter all the buttons with weight as ".25"> 
       </sub innerRow2> 
       <sub linearLayout=innerRow3 
        vertical 
        weightSum=1> 
        <enter all the buttons with weight as ".25"> 
       </sub innerRow3> 
      <sub linearLayout=innerRow4 
        vertical 
        weightSum=1> 
        <enter all the buttons with weight as ".25"> 
       </sub innerRow4> 
      <sub linearLayout=innerRow5 
        vertical 
        weightSum=1> 
        <enter all the buttons with weight as ".25"> 
       </sub innerRow5> 
+0

Mój układ główny to RelativeLayout, więc nie mogę użyć sumy ciężaru, myślę, że – Vins

+0

Możesz wypróbować to z layout_weight lub możesz zawrzeć ten linearny układ w swoim RelativeLayout @vins ... – amalBit

Powiązane problemy