Вложенность Относительная компоновка внутри линейной компоновки - PullRequest
1 голос
/ 15 октября 2010

У меня есть следующий код в 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 правильно отображаются текст и кнопка редактирования (см. скриншот ниже)

alt text

Но на устройстве и эмуляторе кнопка не скрыта. (см. скриншот ниже)

alt text

Есть идеи, почему кнопка скрыта в устройстве?

Ответы [ 3 ]

6 голосов
/ 15 октября 2010

Попробуйте следующие изменения в вашем коде.Сначала нужно определить кнопку, поскольку она имеет фиксированную ширину, а затем поместить текст 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>
0 голосов
/ 15 октября 2010

Вы также можете использовать LinearLayout вместо RelativeLayout для архивирования. Вы можете использовать android:layout_weight, чтобы 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>
0 голосов
/ 15 октября 2010

Я не вижу кнопку в компоновщике макетов ... причина, по-моему, в том, что ширина EditText является родительской заливкой, поэтому она заполняет родительскую область, нажимая кнопку.Если вы должны использовать RelativeLayout, вам нужно явно указать ширину EditText.В противном случае вы можете переключиться на горизонтальный LinearLayout и установить вес поля редактирования на «1».

Кроме того, существуют недопустимые параметры для RelativeLayout:

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