Как сделать так, чтобы макет заполнял экран по вертикали, но начинал расти, когда контент не умещался - PullRequest
1 голос
/ 06 ноября 2019

Хотелось бы, чтобы у меня был пример, чтобы показать, если он кажется запутанным, но в основном я хочу показать нижнюю панель инструментов с правой кнопкой навигации (например, перейти на следующую страницу), всегда привязанной к нижней части экрана, но еслисодержание на странице (средний раздел) растет, панель инструментов будет сдвигаться вниз, так что вам придется прокручивать, чтобы добраться до него. Я знаю, это кажется странным, но это требования. Каков наилучший подход для этого?

1 Ответ

2 голосов
/ 06 ноября 2019

Вы можете достичь этого, комбинируя ScrollView, используя android:fillViewport="true" и вертикальную LinearLayout, которая имеет Space с android:layout_weight="1" между вашим контентом и панелью навигации.

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <View
            android:layout_width="match_parent"
            android:layout_height="200dp"
            android:background="#ccc"/>

        <Space
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"/>

        <View
            android:layout_width="match_parent"
            android:layout_height="48dp"
            android:background="#eee"/>

    </LinearLayout>

</ScrollView>

Это первое представление является заполнителем для любого содержимого, которое вы хотите отобразить, а второе - заполнителем для вашей панели навигации. Вы можете видеть, что когда первое представление короткое (высотой 200 dp), вы получаете «контент» вверху и панель навигации внизу:

Это работает, потому что атрибут fillViewport будет "растягивать" дочерний элемент LinearLayout для заполнения экрана, после чего появляется "дополнительное" пространство, а атрибут layout_weight в элементе Space будетпотреблять все это пространство. (Обратите внимание, что, несмотря на то, что ScrollView, вы не можете прокручивать что-либо в этом состоянии, так как представление растянуто до точного размера экрана.)

Однако, когда «содержимое»достаточно высокий, чтобы заполнить экран, атрибут fillViewport не будет иметь никакого эффекта, LinearLayout не будет растянут, и не будет никакого дополнительного места для потребления. Поэтому, как только вы прокрутите страницу вниз, ваш контент заполнится до самого края панели навигации:

(Прокрутка вверху слева и прокрутка внизу справа.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...