在线性布局中嵌套相对布局

时间:2010-10-15 11:20:15

标签: android layout android-linearlayout relativelayout

我的layout.xml中有以下代码。

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

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_height="wrap_content" android:layout_width="fill_parent">

    <EditText android:hint="@string/feed_url"
        android:id="@+id/feedUrl" android:textSize="14dp" android:inputType="textUri"
        android:layout_marginRight="45dp" android:layout_height="wrap_content" android:layout_width="fill_parent">
    </EditText>

    <Button android:id="@+id/getGraph"
        android:text="@string/get"
        android:layout_toRightOf="@id/feedUrl" 
        android:layout_alignParentRight="true"          
        android:layout_height="wrap_content" android:width="45dp" android:layout_width="wrap_content">
    </Button>

</RelativeLayout>

<WebView android:id="@+id/wv1" android:layout_height="wrap_content"
    android:layout_width="fill_parent" />
</LinearLayout>

在eclipse插件布局创建器中,EditText和按钮正确显示。 (见下面的截图)

alt text

但是在设备和模拟器上,按钮未隐藏。 (见下面的截图)

alt text

知道按钮隐藏在设备中的原因吗?

3 个答案:

答案 0 :(得分:6)

尝试对代码进行以下更改。您必须首先定义按钮,因为它具有固定宽度,然后放置EditText以填充位于按钮左侧的剩余空间。该按钮也必须首先定义(在Android 2.2之前,即)。

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent">

    <Button 
        android:id="@+id/getGraph"
        android:text="@string/get" 
        android:layout_alignParentRight="true"          
        android:layout_height="wrap_content" 
        android:layout_width="wrap_content"
        />
    <EditText 
        android:hint="@string/feed_url"
        android:id="@+id/feedUrl" 
        android:textSize="14dp" 
        android:inputType="textUri"
        android:layout_marginRight="45dp" 
        android:layout_height="wrap_content" 
        android:layout_width="fill_parent"
        android:layout_toLeftOf="@id/getGraph" 
        />
</RelativeLayout>

答案 1 :(得分:0)

我无法在布局构建器中看到该按钮...原因,我认为EditText宽度是填充父级,因此它会填充父按钮。如果必须使用RelativeLayout,则需要明确定义EditText的宽度。否则,您可能需要切换到水平LinearLayout并将编辑框的权重设置为“1”。

此外,RelativeLayout还有无效选项:

xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal

答案 2 :(得分:0)

您也可以使用LinearLayout而不是RelativeLayout来存档它。您可以使用android:layout_weight使Button不被EditText覆盖。以下是可能有效的示例xml:

<LinearLayout android:orientation="horizontal"
    android:layout_height="wrap_content" android:layout_width="fill_parent">
    <EditText android:hint="@string/feed_url"
        android:id="@+id/feedUrl" android:textSize="14dp"
        android:inputType="textUri" android:layout_marginRight="45dp"
        android:layout_height="wrap_content" android:layout_width="fill_parent" />
    <Button android:id="@+id/getGraph" android:text="@string/get"       
        android:layout_height="wrap_content" android:width="45dp"
        android:layout_width="wrap_content"
        android:layout_weight="1" />
</LinearLayout>