Макет Android: один виджет прокручиваемый и два фиксированных внизу - PullRequest
1 голос
/ 24 ноября 2011

Я спрашивал здесь или у меня проблемы с этим макетом в течение нескольких недель, поэтому на этот раз я покажу картину того, что мне нужно:

enter image description here

Я хочу, чтобы EditText и кнопка в нижней части экрана всегда (и когда клавиатура появляется, они должны появляться над клавиатурой, а не оставаться под клавиатурой ). Остальная часть свободного экрана должна быть для прокручиваемого TextView.

РЕДАКТИРОВАТЬ: это код прямо сейчас, следуя указаниям Romain. Все работает как положено, кроме свитка. TextView должен быть прокручиваемым, и это не так. Как это исправить?

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

    <TextView
        android:id="@+id/consola"
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        android:scrollbars = "vertical"
        android:height="0dip"
        android:layout_weight="1.0"/>

    <LinearLayout
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="bottom">

        <EditText 
        android:id="@+id/editText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>

        <Button
            android:text="Conectar"
            android:id="@+id/boton"
            android:label="@string/enviar_string"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content">
        </Button>
    </LinearLayout>
</LinearLayout>

Ответы [ 3 ]

5 голосов
/ 24 ноября 2011

Ваш макет слишком сложный, вот сокращенная версия того, что вы должны делать:

LinearLayout width=fill_parent height=fill_parent orientation=vertical
    TextView width=fill_parent height=0dip layout_weight=1.0
    EditText width=fill_parent height=wrap_content
    Button width=fill_parent height=wrap_content

Lay_Light в TextView является ключом: он сообщает родительскому LinearLayout, что вы хотите дать этоTextView все оставшееся пустое пространство (это также, почему высота установлена ​​в 0dip.)

1 голос
/ 28 ноября 2011

Я наконец нашел решение самостоятельно:

<?xml version="1.0" encoding="utf-8"?>

<ScrollView   
android:id="@+id/scroller"  
android:layout_width="fill_parent" 
android:layout_height="fill_parent"
android:height="0dip"
android:layout_weight="1.0">  

    <TextView
        android:id="@+id/consola"
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"/>

</ScrollView>

<EditText 
    android:id="@+id/editText"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"/>

<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="bottom">

    <Button
        android:text="Conectar"
        android:id="@+id/boton"
        android:label="@string/enviar_string"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
    </Button>
</LinearLayout>

0 голосов
/ 25 ноября 2011

Установите для isScrollContainer значение true в TextView, что позволяет изменить его размер, если необходимо отобразить экранную клавиатуру. Добавьте android: windowSoftInputMode = " AdjustResize " к своей активности в манифесте.

Немного устаревшая документация

...