Я занимаюсь разработкой приложения с пользовательской «клавиатурой», которая в основном представляет собой макет с несколькими кнопками, которые всплывают снизу, когда пользователь собирается сделать какой-то ввод.Основной вид состоит из вида прокрутки с некоторыми другими компонентами.Проблема в том, что когда пользователь собирается сделать какой-то ввод и клавиатура становится видимой, я не могу заставить высоту прокрутки автоматически подстраиваться под доступную высоту, когда отображается клавиатура, что приводит к тому, что клавиатура отображается над основнымUI.См. Рисунок этого поведения.
То, что я ищу, - это то же поведение, что и 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, или мне нужно сделать это программно?Любые советы по этой проблеме очень ценятся, так как я застрял на этом.