Макет Android: один виджет прокручиваемый и два фиксированных внизу

1

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

Изображение 174551

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

EDIT: это код прямо сейчас, по указанию Ромен. Все работает так, как ожидалось, но свиток. 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>
Теги:
textview
android-layout
scrollable

3 ответа

1
Лучший ответ

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

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

5

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

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

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

  • 1
    Хорошо, я также окружил EditText и Button вторым LinearLayout, чтобы привести их к нижней гравитации. Но теперь я хочу, чтобы этот линейный макет, содержащий оба виджета, всегда отображался поверх клавиатуры. Как мне это сделать?
0

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню