Android:如何使视图增长以填充可用空间?


89

这似乎很简单,但是我不知道该怎么做。我有一个带有EditText和两个ImageButtons的水平布局。我希望ImageButtons的大小固定,并且EditText占用布局中的剩余空间。如何做到这一点?

<LinearLayout 
        android:orientation="horizontal"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content">
        <EditText 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
        </EditText>
        <ImageButton 
            android:src="@drawable/img1"
            android:layout_width="50dip" 
            android:layout_height="50dip">
        </ImageButton>
        <ImageButton 
            android:src="@drawable/img2"
            android:layout_width="50dip" 
            android:layout_height="50dip">
        </ImageButton>
</LinearLayout>

Answers:


51

试试相对布局

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content">
    <ImageButton 
        android:id="@+id/btn1"
        android:src="@drawable/icon"
        android:layout_width="50dip" 
        android:layout_height="50dip"
        android:layout_alignParentRight="true"/>
    <ImageButton 
        android:id="@+id/btn2"
        android:src="@drawable/icon"
        android:layout_width="50dip" 
        android:layout_height="50dip"
        android:layout_toLeftOf="@+id/btn1"/>
    <EditText 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@+id/btn2">
    </EditText>

</RelativeLayout>

4
谢谢。这很好。(正如Joseph所指出的,除了必须在EditText之前定义ImageButtons)。
2011年

1
fill_parent-从API级别8开始不推荐使用此常量,并由{@code match_parent}代替。
Zon

144

如果要保持布局相同(即文本后的按钮),请使用layout_weight属性以及fill_parent,因此:

<LinearLayout 
    android:orientation="horizontal"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content">
    <EditText 
        android:layout_weight="1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
    </EditText>
    <ImageButton 
        android:src="@drawable/img1"
        android:layout_width="50dip" 
        android:layout_height="50dip">
    </ImageButton>
    <ImageButton 
        android:src="@drawable/img2"
        android:layout_width="50dip" 
        android:layout_height="50dip">
    </ImageButton>
 </LinearLayout>

赋予EditText“权重”会使它最后被弄清楚,并优先考虑按钮。尝试不同的layout_weights,看看有多少乐趣!


1
谢谢。我在我的布局3个区域(头,内容-的WebView和页脚),它通过设置解决了这个问题的WebView layout_weight = 1和页脚的layout_weight = 0
MKK

不知道将体重和0dp设置为一个孩子的窍门。谢谢!
Marcel Bro 2014年

1
通常认为这是最佳做法吗?有趣的是,您可以影响android解析视图的顺序。
赛普拉斯弗兰肯费尔德

2
宽度应保持0我认为
Bibaswann Bandyopadhyay

19

好的:

<RelativeLayout 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content">

        <ImageButton 
            android:id="@+id/button1"
            android:src="@drawable/img1"
            android:layout_width="50dip"
            android:layout_alignParentTop="true" 
            android:layout_height="50dip">
        </ImageButton>
        <ImageButton 
            android:src="@drawable/img2"
            android:layout_width="50dip" 
            android:layout_alignParentTop="true"
            android:layout_toRightOf="@id/button1"
            android:layout_height="50dip">
        </ImageButton>
        <EditText 
            android:layout_below="@id/button"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent">
        </EditText>
</RelativeLayout>

布局的关键点是:

  • 尺寸固定的项目将首先放置在布局中,这样,当Android来计算事物高度的高度时,fill_parent文件中的位置将随后考虑在内,它仅考虑剩余空间,而不考虑可能占用的所有空间。那里什么都没有
  • EditText的高度为fill_parentmatch_parent在2.2+中),因此它将占用剩余的可用空间

抱歉,您的问题还不够。如果您想以垂直方式进行操作,以上代码将提供答案。对于水平布局,@ Sunil发布的代码应该起作用。


谢谢约瑟夫。这确实有效。不过,我赞扬了Sunil的速度稍快。
2011年

12

使用layout_widthlayout_height将设置为0dp(根据要填充剩余空间的方向)。然后使用layout_weight填充剩余空间。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.