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"/>