我在一个活动(LinearLayout)和几个2 AutoCompleteTextViews
(无线电组,按钮等)中有additional controls
。不知何故,AutoCompleteTextViews是never losing focus
。
例如:
用户单击AutoCompleteTextView,控件获得焦点。因此光标开始闪烁,显示自动完成下拉列表和键盘。这可以。
但是,如果user now clicks on of the radio buttons
(或其他控件),仍会显示AutoCompleteTextView is still blinking
中的光标和键盘。
如何让焦点自动消失?
编辑: xml代码
<AutoCompleteTextView
android:id="@+id/ediFrom"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:singleLine="true"
android:text="" />
答案 0 :(得分:7)
只有对我有用的解决方案是添加此行
android:focusable="true"
android:focusableInTouchMode="true"
到AutoCompleteTextView的父级(如LinearLayout等..)
答案 1 :(得分:2)
您是否尝试使用android:focusableInTouchMode="true"
each view
代码段
<AutoCompleteTextView
android:id="@+id/ediFrom"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:singleLine="true"
android:focusableInTouchMode="true"
android:text="" />
http://android-developers.blogspot.in/2008/12/touch-mode.html
答案 2 :(得分:1)
为了避免设置其他所有内容focusable
(如果碰巧在许多其他布局中使用相同的文本视图会很痛苦),我们选择覆盖逻辑来拦截活动级别的触摸屏事件:
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
View v = getCurrentFocus();
if (v instanceof EditText) {
int scrcoords[] = new int[2];
v.getLocationOnScreen(scrcoords);
// calculate the relative position of the clicking position against the position of the view
float x = event.getRawX() - scrcoords[0];
float y = event.getRawY() - scrcoords[1];
// check whether action is up and the clicking position is outside of the view
if (event.getAction() == MotionEvent.ACTION_UP
&& (x < 0 || x > v.getRight() - v.getLeft()
|| y < 0 || y > v.getBottom() - v.getTop())) {
if (v.getOnFocusChangeListener() != null) {
v.getOnFocusChangeListener().onFocusChange(v, false);
}
}
}
return super.dispatchTouchEvent(event);
}
如果您将此逻辑放在基本活动中,那么当您点按其外部的任何位置时,任何带有编辑文字的屏幕都会点击onFocusChange
。通过聆听onFocusChange
,您可以在另一个视图中clearFocus
或requestFocus
。它或多或少是一个黑客攻击,但至少你不必为许多布局上的任何其他项目设置焦点。