我正在开发带有自定义“键盘”的应用,该应用基本上是一种布局,其中包含一些按钮,当用户要进行一些输入时,这些按钮将从底部弹出。主视图包含一个滚动视图,其中包含一些其他组件。问题是当用户将要进行一些输入并且使键盘可见时,当显示键盘时,我无法使scrollviews高度自动调整为可用高度,这导致键盘显示在主键盘上方。用户界面。看到这种行为的图片。
我正在寻找与android:windowSoftInputMode="adjustResize"
相同的行为,但是由于我没有使用系统软键盘作为输入,所以我没有使用该标签。
要隐藏和显示键盘,我使用View.VISIBLE
和View.GONE
。
我的UI的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来实现,还是需要以编程方式进行?非常感谢您对此问题的任何提示,因为我对此有些执着。
答案 0 :(得分:1)
尝试将RunnersKeyboard和ScrollView作为子级放置到您的父级布局中,
<LinearLayout
<ScrollView
<RunnersKeyboard
</LinearLayout>
您可以将RunnersKeyboard和scrollView的权重都设置为1,将高度设置为0dp,以使它们占据整个屏幕的一半,并且当您将RunnersKeyboard可见性设置为不显示时,ScrollView将占据整个屏幕。