我有一个滚动视图,动态地填充了相当通用的EditTexts。 Flow似乎工作正常:用户填写一个字段,点击软键盘上的“下一个”按钮,焦点传递到下一个EditText。
在最终的EditText上,“下一步”按钮被“完成”替换,因为Android意识到没有更多的视图可以向下聚焦。在没有很多字段的页面上(因此没有滚动),这可以正常工作。 “完成”键关闭键盘,用户可以进入下一页。但是,在有更多EditTexts和滚动的页面上,当用户点击最终EditText上的“done”键时,焦点将被发送到第一个可见的EditText,而不是关闭键盘并按预期移除焦点。我不确定为什么会这样,这引起了一个令人头痛的问题。
此外,我还有另一个几乎完全相同的问题,可以通过完全相同的解决方案解决。当用户向下滚动然后点击操作栏上的按钮时,第一个可见的EditText会获得焦点。我不希望这种情况发生。我更喜欢当前的EditText失去对按钮的关注,但是当我点击按钮时似乎没有触发onFocusChangeListener
。
真的很感激任何帮助!这是一些代码:
我的通用EditText布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center" >
<EditText
android:id="@+id/editTextRow"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textCursorDrawable="@drawable/cursor_white" />
</RelativeLayout>
包含TextViews(EditTexts)列表的布局:
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="vertical" >
<TextView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="3"
android:id="@+id/title"
android:gravity="center"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="7"
android:focusable="true"
android:focusableInTouchMode="true"
android:id="@+id/form_view"
android:orientation="vertical">
</LinearLayout>
</LinearLayout>
</ScrollView>
我的onFocusChangeListener
:
if (hasFocus){
if (item.itemFormat.equals("currency")){
s = s.replaceAll("\\$", "").replaceAll(",", "");
}
text.setText(s);
((EditText)text).selectAll();
imm.showSoftInput(text, InputMethodManager.SHOW_IMPLICIT);
}
else {
//storing values for form happens here
text.clearFocus();
}