Android actionNext赢得';t滚动以显示最后一个文本InputLayout

Android actionNext赢得';t滚动以显示最后一个文本InputLayout,android,android-activity,android-scrollview,android-textinputlayout,Android,Android Activity,Android Scrollview,Android Textinputlayout,我有一个ConstraintLayout,其中包含8个TextInputLayout字段,每个字段都是垂直方向(如垂直线性布局)。每个文件的文本输入文本中都有这一行: android:imeOptions="actionNext" 约束布局包含在嵌套的滚动视图中 这应该作为一个简单的表单来捕获注册数据。当用户完成每个字段时,他们点击Next按钮,表单垂直滚动到下一个字段 在用户完成倒数第二个字段之前,这一切都可以正常工作。此时,当用户点击next时,表单既不会滚动,也不会将焦点提供给最终字段。

我有一个
ConstraintLayout
,其中包含8个
TextInputLayout
字段,每个字段都是垂直方向(如垂直
线性布局
)。每个文件的
文本输入文本
中都有这一行:

android:imeOptions="actionNext"
约束布局包含在嵌套的滚动视图中

这应该作为一个简单的表单来捕获注册数据。当用户完成每个字段时,他们点击
Next
按钮,表单垂直滚动到下一个字段

在用户完成倒数第二个字段之前,这一切都可以正常工作。此时,当用户点击next时,表单既不会滚动,也不会将焦点提供给最终字段。该字段隐藏在软键盘后面,因此用户不知道它在那里。我可以手动滚动表单以显示它,但这不是我试图实现的行为

以下是xml的相关部分:

活动:

<androidx.core.widget.NestedScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

    <fragment
        android:id="@+id/onboarding_nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:defaultNavHost="false"
        app:navGraph="@navigation/onboarding_nav_graph" />

</androidx.core.widget.NestedScrollView>

我不知道我错过了什么。如何让滚动视图显示最后一个字段,而用户不必手动滚动字段?

我找到了问题所在。请注意,最后两个
TextInputLayout
字段用于密码,而
app:passwordToggleEnabled
在这两个字段上都设置为
true

在这种状态下,当在第一个
textinputtext
字段(
reg\u password
)上点击
Next
按钮时,我希望下一个关注的对象是
reg\u password\u confirm
。但是,当我在emulator设置中打开“显示布局边界”(Show Layout Bounds)并仔细检查它时,我注意到有焦点的对象是
reg_password
右侧的切换(图标形状像眼睛)

解决方法非常简单。我使用了
android:nextFocusForward=“@id/reg\u password\u confirm”
,而不是
reg\u password
块中的
android:imeOptions=“actionNext
。这会覆盖算法并显式地将焦点切换到
reg\u password\u confirm

这也会导致滚动视图向下移动,以显示
TextInputLayout
字段

我希望这对某人有帮助

<com.google.android.material.textfield.TextInputLayout
            android:id="@+id/password_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            app:errorTextAppearance="@style/error_appearance"
            app:layout_constraintTop_toBottomOf="@id/cell_layout"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintWidth_percent="0.8"
            app:passwordToggleEnabled="true"
            app:passwordToggleTint="@color/colorAccent"
            style="@style/MyTextInputLayout">

            <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/reg_password"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/enter_password"
                android:maxLines="1"
                android:inputType="textPassword"
                android:imeOptions="actionNext"
                android:text="@{registrationData.password}"
                bind:regularTypeface='@{"raleway"}'
                style="@style/MyTextInputEditText"/>

        </com.google.android.material.textfield.TextInputLayout>

        <com.google.android.material.textfield.TextInputLayout
            android:id="@+id/password_confirm_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            app:errorTextAppearance="@style/error_appearance"
            app:layout_constraintTop_toBottomOf="@id/password_layout"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintWidth_percent="0.8"
            app:passwordToggleEnabled="true"
            app:passwordToggleTint="@color/colorAccent"
            style="@style/MyTextInputLayout">

            <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/reg_password_confirm"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/password_confirmation"
                android:maxLines="1"
                android:inputType="textPassword"
                android:imeOptions="actionDone"
                bind:regularTypeface='@{"raleway"}'
                style="@style/MyTextInputEditText"/>

        </com.google.android.material.textfield.TextInputLayout>
<activity
    android:name=".activities.OnboardingActivity"
    android:theme="@style/AppTheme.NoActionBar"
    android:windowSoftInputMode="adjustResize"/>