我在工具栏中的可展开操作视图中有一个EditText
。当我展开动作时,会显示EditText
,我希望它能够获得焦点。为实现这一点,我做了以下事情:
action_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/connections_find_people_container"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent">
<EditText
android:id="@+id/connections_find_people_edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"/>
</RelativeLayout>
在我的片段中
@Override
public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
inflater.inflate(R.menu.add_connection, menu);
mAddMenuItem = menu.findItem(R.id.menu_add);
MenuItemCompat.setActionView(mAddMenuItem, R.layout.action_layout);
mSearchView = MenuItemCompat.getActionView(mAddMenuItem);
mSearchEditText = (EditText) mSearchView.findViewById(R.id.connections_find_people_edit);
MenuItemCompat.setOnActionExpandListener(mAddMenuItem, mOnSearchExpandListener);
super.onCreateOptionsMenu(menu, inflater);
}
private final OnSearchExpandListener mOnSearchExpandListener = new MenuItemCompat.OnActionExpandListener {
mSearchEditText.requestFocus();
return true;
}
@Override
public boolean onMenuItemActionCollapse(final MenuItem item) {
return true;
}
}
令人惊讶的是,这不起作用。点击工具栏中的操作后,视图会展开,显示mSearchEditText
,但无法获得焦点。
更具体(奇怪),mSearchEditText.requestFocus();
返回true ,但软件键盘仍未显示,且mSearchEditText
中没有光标。
显示软件键盘并不是什么大问题,有很多方法可以强制它,但即使我显示键盘,输入也不会将任何文本插入mSearchEditText
。只有当我在光标出现时点击mSearchEditText
并且我可以在其中输入一些文字后,它才会出现。
我尝试过的事情:
focusable
和focusableInTouchMode
以及onCreateOptionsMenu()
和动态视图展开时mSearchEditText.clearFocus()
requestFocus()
这真的很奇怪,因为关注
@Override
public boolean onMenuItemActionExpand(final MenuItem item) {
mSearchEditText.setFocusableInTouchMode(true);
mSearchEditText.setFocusable(true);
mSearchView.postDelayed(new Runnable() {
@Override
public void run() {
if (mSearchEditText.requestFocus()) {
KeyboardUtils.showSoftKeyboard(ConnectionsFragment.this);
}
}
}, 300);
return true;
}
显示键盘,应该表示mSearchEditText
具有焦点,但输入时不输入任何文字。 (再次,当我点击EditText时,光标出现,一切正常)。
答案 0 :(得分:0)
有时会发生Aaand,在发布问题后不久我就找到了答案。
我不得不引用EditText
中onCreateOptionsMenu()
的引用,而是使用传递给MenuItem
的{{1}}并在那里获得引用。
所以现在这对我有用:
onMenuItemActionExpand()