Отрегулируйте высоту прокрутки на основе видимости других макетов - PullRequest
0 голосов
/ 19 мая 2019

Я занимаюсь разработкой приложения с пользовательской «клавиатурой», которая в основном представляет собой макет с несколькими кнопками, которые всплывают снизу, когда пользователь собирается сделать какой-то ввод.Основной вид состоит из вида прокрутки с некоторыми другими компонентами.Проблема в том, что когда пользователь собирается сделать какой-то ввод и клавиатура становится видимой, я не могу заставить высоту прокрутки автоматически подстраиваться под доступную высоту, когда отображается клавиатура, что приводит к тому, что клавиатура отображается над основнымUI.См. Рисунок этого поведения.

Actual behavior

То, что я ищу, - это то же поведение, что и android:windowSoftInputMode="adjustResize", но так как я не используюсистемная клавиатура в качестве ввода, которую я не использую для этого тега.

Чтобы скрыть и показать свою клавиатуру, я использую View.VISIBLE и View.GONE.XML для моего пользовательского интерфейса:

<RelativeLayout 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"
   tools:context=".activity.RunnersCalculator">

<ScrollView
    android:id="@+id/input_sv"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:layout_alignParentTop="true"
    android:clipToPadding="false"
    android:fillViewport="true">

    <LinearLayout
        android:id="@+id/input_ll"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clickable="true"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:gravity="top"
        android:orientation="vertical"
        android:paddingLeft="5dp"
        android:paddingTop="5dp"
        android:paddingRight="5dp"
        android:paddingBottom="5dp">

        <TextView
            android:id="@+id/pace_to_speed_tv"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="2dp"
            android:fontFamily="@font/montserrat_bold"
            android:text="@string/convert_xx_to_xx"
            android:textColor="@color/colorHeadingText"
            android:textSize="18sp"
            android:textStyle="bold" />

        <LinearLayout
            android:id="@+id/pace_to_speed_ll"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:orientation="horizontal">

            <ax.stardust.runcal.component.KeyboardlessEditText
                android:id="@+id/pace_to_speed_et"
                android:layout_width="120dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@drawable/input_default"
                android:ems="10"
                android:fontFamily="@font/open_sans"
                android:gravity="center_horizontal"
                android:hint="@string/default_pace"
                android:inputType="text"
                android:selectAllOnFocus="true"
                android:singleLine="true"
                android:textColor="@color/colorInputText"
                android:textCursorDrawable="@drawable/input_cursor_default" />

            <TextView
                android:id="@+id/pace_to_speed_results_tv"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="5dp"
                android:layout_weight="100"
                android:fontFamily="@font/open_sans"
                android:text="@string/pace_to_speed_results"
                android:textColor="@color/colorText"
                android:textSize="16sp" />

        </LinearLayout>

    <!-- rest of components omitted -->

    </LinearLayout>
</ScrollView>

<LinearLayout
    android:id="@+id/keyboard"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:layout_alignParentBottom="true"
    android:animateLayoutChanges="true"
    android:gravity="bottom|fill_horizontal"
    android:orientation="vertical"
    android:paddingLeft="5dp"
    android:paddingTop="5dp"
    android:paddingRight="5dp"
    android:paddingBottom="5dp">

    <ax.stardust.runcal.component.RunnersKeyboard
        android:id="@+id/soft_keyboard"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:visibility="gone">
    </ax.stardust.runcal.component.RunnersKeyboard>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center_horizontal">

        <TextView
            android:id="@+id/author_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginEnd="1dp"
            android:fontFamily="@font/open_sans"
            android:gravity="center_horizontal"
            android:text="@string/author"
            android:textColor="@color/colorText"
            android:textSize="8sp" />

        <TextView
            android:id="@+id/version_name_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="1dp"
            android:layout_toEndOf="@id/author_tv"
            android:fontFamily="@font/open_sans"
            android:gravity="center_horizontal"
            android:text="@string/version_name"
            android:textColor="@color/colorText"
            android:textSize="8sp" />
    </RelativeLayout>
</LinearLayout>
</RelativeLayout>

Это даже выполнимо только с использованием XML, или мне нужно сделать это программно?Любые советы по этой проблеме очень ценятся, так как я застрял на этом.

1 Ответ

1 голос
/ 19 мая 2019

попытайтесь поместить RunnersKeyboard и ScrollView как дочерние элементы в родительский макет,

<LinearLayout 

<ScrollView


<RunnersKeyboard

</LinearLayout>

вы можете установить веса RunnersKeyboard и scrollView на 1, а высоту на 0dp, чтобы они занимали половину вашего полного экрана, а когда вы отключите видимость RunnersKeyboard, ScrollView займет весь экран

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