Fragment中的ScrollView在软键盘出现时不滚动

Posted

技术标签:

【中文标题】Fragment中的ScrollView在软键盘出现时不滚动【英文标题】:ScrollView in Fragment does not scroll when the soft keyboard shows up 【发布时间】:2018-12-08 07:28:40 【问题描述】:

我有一个Fragment,其中有一个ScrollView Fragment

<ScrollView
    android:id="@+id/scroll_view"
    android:layout_
    android:layout_
    android:paddingBottom="16dp"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/appbar">

    <android.support.constraint.ConstraintLayout
        android:layout_
        android:layout_>

        <com.tatar.mobile.widget.CardSelectionView
            android:id="@+id/card_selection_view"
            android:layout_
            android:layout_
            android:layout_marginTop="8dp"
            app:accountRightTextView1="@string/available"
            app:accountTitleTextView="@string/from"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:id="@+id/line_text_view"
            android:layout_
            android:layout_
            android:layout_marginTop="8dp"
            android:background="@color/gray.light"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/card_selection_view" />

        <Spinner
            android:id="@+id/type_spinner"
            style="@style/spinner"
            android:layout_marginTop="8dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/line_text_view" />

        <Spinner
            android:id="@+id/company_spinner"
            style="@style/spinner"
            android:layout_marginTop="8dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/type_spinner" />

        <LinearLayout
            android:id="@+id/dynamic_form_container"
            android:layout_
            android:layout_
            android:orientation="vertical"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/company_spinner" />

        <Spinner
            android:id="@+id/installment_spinner"
            style="@style/spinner"
            android:layout_marginTop="8dp"
            android:visibility="invisible"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/dynamic_form_container" />

        <Button
            android:id="@+id/continue_button"
            style="@style/action_button"
            android:layout_marginTop="16dp"
            android:text="@string/continue_button_text"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/installment_spinner" />

    </android.support.constraint.ConstraintLayout>

</ScrollView>

LinearLayout 的 id 为 dynamic_form_container,其中 ScrollView 包含表单输入字段,这些字段将通过 Web 服务调用填充,并且可能有多达 6-7 个输入字段,具体取决于发送到 Web 的参数服务。所以,表格的高度有点高,这就是问题开始的地方。当我尝试在输入字段中输入内容时,会显示软键盘,而其他一些输入字段则停留在软键盘下方,并且无法滚动。

我试图将其用于 ActivityFragment,但它没有帮助。

android:windowSoftInputMode="adjustResize|stateHidden"

我希望在软键盘出现时能够滚动。我该如何解决这个问题?

任何帮助将不胜感激

【问题讨论】:

【参考方案1】:
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

onCreateView 方法对我有用。

【讨论】:

【参考方案2】:

我找到了解决这个问题的方法here, 在你的项目中包含这个类。 并在包含片段的活动的 onCreate 中添加以下行。

new KeyboardUtil(this,findViewById(R.id.fragment));

【讨论】:

这适用于任何情况,只需传递您的视图,它就会起作用。我尝试使用具有一个 editText 和 button 的 BottomSheetDialog ,它也在那里工作【参考方案3】:

您好,请参考以下代码

这对我有用..

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:background="@color/white">

<ScrollView
    android:id="@+id/scrollView"
    android:layout_
    android:layout_>

    <android.support.constraint.ConstraintLayout
        android:layout_
        android:layout_>


    </android.support.constraint.ConstraintLayout>
</ScrollView>

AndroidManifest.xml

  <activity
        android:name=".ui.activities.Activity"
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:screenOrientation="portrait"
        android:theme="@style/AppTheme.NoActionBar" />

【讨论】:

以上是关于Fragment中的ScrollView在软键盘出现时不滚动的主要内容,如果未能解决你的问题,请参考以下文章

Android - 如何在软键盘出现时调整弹出窗口

如何为表情符号制作有效的弹出视图?

Android 键盘调整大小

为啥在软键盘出现和消失时抖动 UI 滞后?

Xamarin.Forms.UWP 数字键盘仅在软键盘上

TextInput中的kivy ScrollView实现