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

时间:2011-03-23 13:39:38

标签: android android-layout

这似乎很简单,但我无法弄清楚如何做到这一点。我有一个带有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>

4 个答案:

答案 0 :(得分:127)

如果您想保持布局相同(即文本后面的按钮),请使用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 :(得分:48)

在相对布局中尝试这个

<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>

答案 2 :(得分: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_parent(2.2+中的match_parent),以便占用剩余的可用空间

抱歉没有看过你的问题就够了。如果您想以垂直方式执行此操作,上面的代码将提供答案。对于水平布局,由@Sunil发布的代码应该有效。

答案 3 :(得分:8)

使用设置layout_widthlayout_height0dp(按您要填充剩余空间的方向)。 然后使用layout_weight填充剩余空间。