注意:我的问题不是失去焦点,而是关于获得焦点,因此它不是标记问题的重复
我的工具栏上有一个搜索menuItem,点击它会打开它上面的搜索布局并允许用户搜索。我已经尝试了 Stack Overflow 中其他地方提到的以下解决方案,但它们似乎都不起作用。 (我应该提一下,由于它在别处使用,我无法编辑XML)
来自here
searchText.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(_searchText, InputMethodManager.SHOW_IMPLICIT);
这只是弹出键盘,没有任何反应我尝试了这个+ editText.setCursorVisible(true);
在前述
之前使用setFocusable(true)
和setFocusableInTouchMode(true);
的各种组合
searchText.setFocusable(true);
searchText.setFocusableInTouchMode(true);
searchText.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(_searchText, InputMethodManager.SHOW_IMPLICIT);
在单独的线程中使用(1)(使用Handler.post
)
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
editText.requestFocus();
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
}
},100);
致电editText.performClick()
清除以前的焦点:
private void clearFocus() {
if (activity.getCurrentFocus() != null) {
InputMethodManager imm = (InputMethodManager) activity.getApplication().getSystemService(Activity.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
activity.getCurrentFocus().clearFocus();
}
}
我的代码示例:
public boolean onOptionsItemSelected(MenuItem menuItem) {
if (menuItem.getItemId() == R.id.action_search) {
menuItem.setVisible(false);
onClickForSearchMenuItem();
return true;
}
return super.onOptionsItemSelected(menuItem);
}
private void onClickForSearchMenuItem() {
if (searchLayoutInToolbar != null) {
searchLayoutInToolbar.setVisibility(View.VISIBLE);
final EditText editText = (EditText) searchLayoutInToolbar.findViewById(R.id.custom_Search_Layout_Search_EditText);
//clearFocus();
//editText.setFocusableInTouchMode(true);
//editText.setFocusable(true);
editText.requestFocus();
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
activity.invalidateOptionsMenu();
}
}
android的开发者页面指出
如果其父级之一的getDescendantFocusability()等于FOCUS_BLOCK_DESCENDANTS
,则视图不会成为焦点
但我的观点的父母都没有设置到那个
答案 0 :(得分:2)
试试这个....我希望,这可能对你有帮助。
searchText.setFocusableInTouchMode(true);
searchText.requestFocus();
某些手机(部分旧设备)可能需要这样做:
final InputMethodManager inputMethodManager = (InputMethodManager) context
.getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.showSoftInput(edittext, InputMethodManager.SHOW_IMPLICIT);
如果不起作用,请在活动的field.requestFocus()
方法中尝试onResume()
(而不是onCreate()
)。
感谢。