比例行大小,1行固定

时间:2011-03-24 19:11:33

标签: android

在Android中,我试图基本上创建一个包含2行的表,其中1行表示10个像素,另一行表示屏幕的其余部分。在silverlight中,这相当于一个有2行的表,一个在“Auto”上,另一个在“*”上。

有没有办法做到这一点?我一直在玩布局权重,但这总是一个百分比,我希望1行是固定大小(基本上是wrap_content)。

有什么想法吗?

编辑: 我尝试了所建议的,但它没有工作..所以我希望第一行占用整个空间,除了第2行占用。第2行由2个按钮并排组成,第1行只是一个ListView。这是我有的:

<LinearLayout android:orientation="horizontal"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:layout_weight="1" android:background="#FF0000">

    <ListView android:id="@+id/edit_group_listView"
        android:layout_width="fill_parent" android:layout_height="fill_parent" />

</LinearLayout>

<LinearLayout android:orientation="horizontal"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:layout_weight="0" android:background="#FFFF00">

    <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal" android:layout_width="fill_parent"
        android:layout_height="50dip" android:stretchColumns="2">
        <TableRow>
            <Button android:text="@string/button_save" android:id="@+id/edit_group_save"
                android:layout_width="150dip" android:layout_height="50dip"
                android:enabled="false" android:layout_column="1"></Button>

            <Button android:text="@string/button_cancel" android:id="@+id/edit_group_cancel"
                android:layout_width="150dip" android:layout_height="50dip"
                android:layout_column="3"></Button>
        </TableRow>
    </TableLayout>

</LinearLayout>

当我看到这一切时,我看到的是黄色线性布局(按钮),根本没有列表视图。列表视图有50个项目,我可以通过取消此设置来确认它是可见的。

3 个答案:

答案 0 :(得分:1)

是的,实际上很容易。

第一个单元格的权重必须为0.第二个单元格的权重必须为1,并按宽度填充父级。这样它就会占用容器内的重新存放空间。

轻松!这是一个方便的例子

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <LinearLayout android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="0" android:background="#FF0000"> 
    <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="SomeText" android:id="@+id/theview"/>
    </LinearLayout>
    <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:background="#FFFF00">

    </LinearLayout>

</LinearLayout>

=======================================

更新

像Crayze一样让你过度复杂化!

首先。您不需要表格布局。

第二个问题是你将布局的两个高度都设置为fill_parrent。所以他们都在争夺屏幕尺寸。要解决此问题,您只需将两个布局大小设置为wrap_content即可。这将工作得很好。这里有一个例子,没有代码表。

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:layout_weight="1" android:background="#FF0000">

    <ListView android:id="@+id/edit_group_listView"
        android:layout_width="fill_parent" android:layout_height="fill_parent" />

</LinearLayout>

<LinearLayout android:orientation="horizontal"
    android:layout_width="fill_parent" android:layout_height="wrap_content"
    android:layout_weight="0" android:background="#FFFF00">


            <Button android:text="@string/button_save" android:id="@+id/edit_group_save"
                android:layout_width="150dip" android:layout_height="50dip"
                android:enabled="false" android:layout_column="1"></Button>

            <Button android:text="@string/button_cancel" android:id="@+id/edit_group_cancel"
                android:layout_width="150dip" android:layout_height="50dip"
                android:layout_column="3"></Button>


</LinearLayout>

答案 1 :(得分:0)

使用布局权重并将固定的一个设置为0,另一个设置为任意数字。

答案 2 :(得分:0)

好吧,实际上我通过回顾Taranasus所写的内容来解决这个问题,这在一定程度上是准确的。

这是最终有效的XML:

<LinearLayout android:orientation="vertical"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:layout_weight="1" android:background="#FF0000">

    <ListView android:id="@+id/edit_group_listView"
        android:layout_width="fill_parent" android:layout_height="fill_parent" />

</LinearLayout>

<LinearLayout android:orientation="vertical"
    android:layout_width="fill_parent" android:layout_height="wrap_content"
    android:layout_weight="0" android:background="#FFFF00">

    <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal" android:layout_width="fill_parent"
        android:layout_height="50dip" android:stretchColumns="2">
        <TableRow>
            <Button android:text="@string/button_save" android:id="@+id/edit_group_save"
                android:layout_width="150dip" android:layout_height="50dip"
                android:enabled="false" android:layout_column="1"></Button>

            <Button android:text="@string/button_cancel" android:id="@+id/edit_group_cancel"
                android:layout_width="150dip" android:layout_height="50dip"
                android:layout_column="3"></Button>
        </TableRow>
    </TableLayout>

</LinearLayout>

此网站也提供了帮助:http://www.curious-creature.org/2009/02/22/android-layout-tricks-1/

问题在于: 1.方向必须是“垂直的”,根据文档实际上没有意义。 2.第二行(固定的一行)必须具有wrap_content的高度,这也没有意义,因为谷歌关于权重的文档明确指出这两个元素应该是fill_parent。