2011-07-27 49 views
0

我想在我的應用程序設計中使用表格,但與Android的XML佈局中的HTML不同,您無法使用百分比設置某些東西的寬度。從Google上看,似乎我可以使用「layout_weight」作爲相同的功能,只要值加起來爲100.從這個問題的信息(http://stackoverflow.com/questions/3629331/android-trying-to -understand-androidlayout-weight)我寫了我的佈局,它似乎工作正常。Android中的「layout_weight」的理解

這裏是什麼樣子& XML文件:http://i.imgur.com/rCjKk.png

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 

    <TableLayout 
     android:id="@+id/tableLayout1" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 

      <TableRow 
       android:id="@+id/tablerow1" 
       android:layout_width="fill_parent" 
       android:layout_height="0px" 
       android:layout_weight="10">  
      </TableRow> 

      <TableRow 
       android:id="@+id/tablerow2" 
       android:layout_width="fill_parent" 
       android:layout_height="0px" 
       android:layout_weight="80"> 
      </TableRow> 

      <TableRow 
       android:id="@+id/tablerow3" 
       android:layout_width="fill_parent" 
       android:layout_height="0px" 
       android:layout_weight="10"> 

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

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

      </TableRow> 

</TableLayout> 

</LinearLayout> 

然而,當我將按鈕添加到此佈局,突破這裏看到:http://i.imgur.com/sKxbv.png

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 

    <TableLayout 
     android:id="@+id/tableLayout1" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 

      <TableRow 
       android:id="@+id/tablerow1" 
       android:layout_width="fill_parent" 
       android:layout_height="0px" 
       android:layout_weight="10">  
      </TableRow> 

      <TableRow 
       android:id="@+id/tablerow2" 
       android:layout_width="fill_parent" 
       android:layout_height="0px" 
       android:layout_weight="80"> 
      </TableRow> 

      <TableRow 
       android:id="@+id/tablerow3" 
       android:layout_width="fill_parent" 
       android:layout_height="0px" 
       android:layout_weight="10"> 

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

          <Button 
           android:id="@+id/button1" 
           android:layout_width="fill_parent" 
           android:layout_height="fill_parent"                  
           android:text="Speak"> 
          </Button> 

        </TableRow> 

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

          <Button 
           android:id="@+id/button2" 
           android:layout_width="fill_parent" 
           android:layout_height="fill_parent"         
           android:text="Listen"> 
          </Button> 

        </TableRow>       

      </TableRow> 

</TableLayout> 

</LinearLayout> 

誰能給我解釋一下爲什麼這是?我只需要三行10%,80%和10%,然後兩行佔據最後一行寬度的50%。

+0

你只是想要在底部的按鈕,或者他們必須特別是整個屏幕10pc? –

回答

2

我幾乎不知道爲什麼這不起作用的TableLayout,我嘗試了很多,並無法得到它的工作。然而,它的工作原理與還好`LinearLayouts,所以如果你能和他們一起生活:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" android:orientation="vertical"> 
<LinearLayout 
    android:id="@+id/linearLayout1" 
    android:layout_width="match_parent" android:layout_weight="1" android:layout_height="0dp"></LinearLayout> 
<LinearLayout 
    android:id="@+id/linearLayout2" 
    android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="8"></LinearLayout> 
<LinearLayout 
    android:id="@+id/linearLayout3" 
    android:layout_width="match_parent" android:layout_weight="1" android:layout_height="0dp"> 
    <Button 
     android:text="Button" 
     android:id="@+id/button3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:layout_weight="1"></Button> 
    <Button 
     android:text="Button" 
     android:id="@+id/button4" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:layout_weight="1"></Button> 
</LinearLayout> 

+0

謝謝你,完美的作品。真的很奇怪它沒有與表格雖然.. –

0

如果我理解正確,問題是按鈕正在推動父?

如果是這樣,請嘗試使用android:layout_height="wrap_content"代替按鈕。

+0

是的,這是問題。當我做android:layout_height =「wrap_content」時,它確實使按鈕尺寸合適,但底部的行仍然與第二張圖片中的尺寸相同,而按鈕懸掛在頂部。 –

0

這不工作的原因是,你想給的TableRow大小,然後將其添加到裏面的內容的大小。你應該用TableLayout做什麼是讓內容視圖控制大小。你的問題是你需要一些東西,允許水平分享空間的按鈕,獨立於高度的權重。

實際上,TableRow只是一個水平的LinearLayout,所以在底部的TableRow中有兩個TableRows是多餘的,只需要用一個LinearLayout來代替它。

不知道你會在前兩排有什麼內容很難說什麼是最好的,但是一個TableLayout可能不是最適合你想要的。