【发布时间】:2017-02-26 19:51:13
【问题描述】:
我的问题很简单。如何清除视图中可能具有焦点的所有元素的焦点(赞 EditText -or- TextView 其 textIsSelectable="true" 和文本在在 clearFocus 事件发生时)。
为什么要问(如果我没有得到上面的一般答复):
我有几个片段通过导航视图访问。我的主要目标是在导航视图中打开抽屉片段中的元素焦点。我知道它可以为 NavigationDrawer 获取 onDrawerSlide 方法,并且实际上在我的 MainActivity 中设置了它,以便在抽屉打开时,如果我在其中一个片段中的 EditText 是打开的,我调用 hideSoftKeyboard 代码以便它关闭 SoftKeyboard。
我的代码来获取抽屉打开事件:(在 MainActivity 的 onCreate() 方法中)
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close)
{
//Hide SoftKeyboard on Navigation Drawer Open
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
//Hide SoftKeyboard if it is open
hideSoftKeyboard();
//And Make any view having focus loose focus
//...
//ClearFocus for the whole view is done from here (for whichever Fragment is visible right now)
super.onDrawerSlide(drawerView, slideOffset);
}
};
public void hideSoftKeyboard() //Declared outside onCreate
{
InputMethodManager inputMethodManager = (InputMethodManager)getSystemService(Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}
这里,我的 hideSoftKeyboard() 代码是通用,并且无论从 MainActivity 本身看到什么 Fragment,都可以关闭 SoftKeyboard . 同样我想清除所有 EditTexts 和 TextView 的焦点(因为复制/粘贴选项在打开时显示在抽屉中间)。
我知道我可以为每个调用 onDrawerSlide 函数的 Fragment 编写代码,并为每个元素单独清除焦点,但我想知道是否有可能提供通用解决方案,如果可以,该怎么做。
(如果可能的话,这可能会产生很多影响,并且在很多情况下可能会有所帮助)
【问题讨论】:
标签: android focus navigation-drawer android-view