了解Android中的“layout_weight”

时间:2011-07-27 15:27:44

标签: android xml layout

我想在我的应用程序设计中使用表格,但与Android的XML布局中的HTML不同,您无法使用百分比设置某些内容的宽度。从Google上看,似乎我可以使用“layout_weight”来获得相同的功能,只要这些值加起来为100.来自这个问题的信息(http://stackoverflow.com/questions/3629331/android-trying-to -understand-androidlayout-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%。

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

如果我理解正确,问题是按钮正在推动父母?

如果有,请尝试android:layout_height="wrap_content"而不是按钮。

答案 2 :(得分:0)

这不起作用的原因是您尝试提供TableRow大小,然后将其添加到内部内容的大小。你应该对TableLayout做什么是让内容视图控制大小。您的问题是,您需要一些允许按钮水平共享空间的内容,与高度的权重无关。

实际上,TableRow只是一个水平的LinearLayout,因此在底部TableRow中有两个TableRows是多余的,只需用一个LinearLayout替换它。

如果不知道前两行中会包含哪些内容,很难说什么是最好的,但TableLayout可能不是最适合您想要的内容。