在显示导航抽屉时明确关注内容

时间:2013-10-24 16:16:21

标签: android focus navigation-drawer

在具有导航抽屉的Android活动中清除焦点的最佳方法是什么。

问题在于,当用户选择了一个文本框时,如果你打开导航抽屉后面的事件它没有被抽屉消耗,导航返回一步,让抽屉打开。

现在我解决了在活动中使用此问题,但我想知道是否有人使用其他解决方案,我不需要使用ActionBarDrawerToggle事件。

/** Called when a drawer has settled in a completely open state. */
public void onDrawerOpened(View drawerView) {
    View window = findViewById(R.id.content_frame);
    window.clearFocus();
}

1 个答案:

答案 0 :(得分:4)

确实,抽屉在打开时没有焦点,所以onKeyUp不会被调用。我在主机活动中检查了这一点,并且onBackPressed DrawerLayout#hasFocus()如果活动有一个获得焦点的视图 - 一个EditText或其他内容,则返回false。

我甚至试图搞砸了它的descendantFocusability财产而且没有用。我设法使用与您类似的方法来解决这个问题:抽屉布局要求关注:

mDrawerLayout.setDrawerListener(new DrawerLayout.SimpleDrawerListener() {
    @Override
    public void onDrawerOpened(View drawerView) {
        mDrawerLayout.requestFocus();
    }
});

您正在从内容ViewGroup清除焦点,但我不确定谁会获得焦点,很可能没有视图。
老实说,这对我来说似乎是DrawerLayout中的一个错误,好像它已经打开了,它应该得到了重点。