根据其他布局可见性调整滚动视图高度

时间:2019-05-19 16:02:29

标签: android android-layout

我正在开发带有自定义“键盘”的应用,该应用基本上是一种布局,其中包含一些按钮,当用户要进行一些输入时,这些按钮将从底部弹出。主视图包含一个滚动视图,其中包含一些其他组件。问题是当用户将要进行一些输入并且使键盘可见时,当显示键盘时,我无法使scrollviews高度自动调整为可用高度,这导致键盘显示在主键盘上方。用户界面。看到这种行为的图片。

Actual behavior

我正在寻找与android:windowSoftInputMode="adjustResize"相同的行为,但是由于我没有使用系统软键盘作为输入,所以我没有使用该标签。

要隐藏和显示键盘,我使用View.VISIBLEView.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来实现,还是需要以编程方式进行?非常感谢您对此问题的任何提示,因为我对此有些执着。

1 个答案:

答案 0 :(得分:1)

尝试将RunnersKeyboard和ScrollView作为子级放置到您的父级布局中,

<LinearLayout 

<ScrollView


<RunnersKeyboard

</LinearLayout>

您可以将RunnersKeyboard和scrollView的权重都设置为1,将高度设置为0dp,以使它们占据整个屏幕的一半,并且当您将RunnersKeyboard可见性设置为不显示时,ScrollView将占据整个屏幕。