1
您好我已經使用搜索查看類似下面的軟鍵盤狀態,如何留住後invalidateOptionsMenu安卓
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
menu.clear();
inflater.inflate(R.menu.all_menu, menu);
SearchManager manager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
searchView.setSearchableInfo(manager.getSearchableInfo(getActivity().getComponentName()));
searchTextView = (AutoCompleteTextView) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
try {
Field mCursorDrawableRes = TextView.class.getDeclaredField("mCursorDrawableRes");
mCursorDrawableRes.setAccessible(true);
mCursorDrawableRes.set(searchTextView, R.drawable.cursor); //This sets the cursor resource ID to 0 or @null which will make it visible on white background
} catch (Exception e) {
e.printStackTrace();
}
if (searchView != null) {
searchView.setQueryHint(getString(R.string.search));
searchView.setOnQueryTextListener(this);
}
mMenu = menu;
setNotificationCount(mMenu);
}
,我使用下面的代碼無效通知計數,
getSupportActionBar().invalidateOptionsMenu();
但無效的菜單將關閉打開的鍵盤。即使使操作欄菜單無效,我也想保留鍵盤狀態。所以我試圖用下面的代碼保留鍵盤狀態,
KeyboardVisibilityEvent.setEventListener(getActivity(), new KeyboardVisibilityEventListener() {
@Override
public void onVisibilityChanged(boolean isOpen) {
if(!isFristTime){
Log.d("ss","keyboard status before validated "+isKeyboardOpened);
isKeyboardOpened = isOpen;
isFristTime = true;
}
}
});
getSupportActionBar().invalidateOptionsMenu();
Log.d("ss","keyboard status after validated "+isKeyboardOpened);
if(isKeyboardOpened){
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
try {
Log.d("ss","keyboard status in try ");
Field mCursorDrawableRes = TextView.class.getDeclaredField("mCursorDrawableRes");
mCursorDrawableRes.setAccessible(true);
mCursorDrawableRes.set(searchTextView, R.drawable.cursor); //This sets the cursor resource ID to 0 or @null which will make it visible on white background
BDevice.showSoftKeyboard(getActivity(), searchTextView);
isKeyboardOpened = false;
getSupportActionBar().invalidateOptionsMenu();
} catch (Exception e) {
Log.d("ss","keyboard status in catch ");
e.printStackTrace();
}
}
}, 1000);
}
但是這不起作用。現在我想打開軟鍵盤,如果在打開菜單之前打開它。你能否建議我在使菜單無效後保留鍵盤狀態?