首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >android -使用导航抽屉实现向上按钮操作

android -使用导航抽屉实现向上按钮操作
EN

Stack Overflow用户
提问于 2016-03-18 11:59:17
回答 5查看 4K关注 0票数 6

问题

我正在使用Android模板中的导航抽屉。我想在我的一些片段中使用UP按钮(箭头),安装“汉堡”按钮。我用AppCompatActivity

我使用此代码显示按钮箭头:

代码语言:javascript
复制
public void UseUpButton(boolean value) {
    ActionBar actionBar = getSupportActionBar();
    if (value) {
        actionBar.setDisplayHomeAsUpEnabled(false);
        toggle.setDrawerIndicatorEnabled(false);
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setDisplayShowHomeEnabled(true);
    } else {
        toggle.setDrawerIndicatorEnabled(true);
    }
}

尝试过的变体:

但我没办法按下这个按钮。我尝试了一些方法:

使用onOptionsItemSelected

代码语言:javascript
复制
public boolean onOptionsItemSelected(MenuItem item) {

    Log.d("WTF", "menu");
    switch (item.getItemId())
    {
        case android.R.id.home:
            getFragmentManager().popBackStack();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

我将getSupportActionBar().setHomeButtonEnabled(true);添加到我的Activity::onCreate中,但是当我按Up按钮时没有调用onOptionsItemSelected,当我按菜单项时工作正常。

使用ActionBarToggle OnClickListener

代码语言:javascript
复制
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open,       
            R.string.navigation_drawer_close);

drawer.setDrawerListener(toggle);
toggle.syncState();
toggle.setToolbarNavigationClickListener(new View.OnClickListener()
{
        @Override
        public void onClick(View v) {

        }
 });

但是这种方法也不需要按向上键。

结论:

那么,我怎样才能捕捉向上按钮按下事件呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-04-30 12:22:29

几天前我在某个地方发现了这个。

在我的代码中我初始化了ActionBarDrawerToggle。它有一些构造函数,但我感兴趣的是:

1

代码语言:javascript
复制
public ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout,
        @StringRes int openDrawerContentDescRes,
        @StringRes int closeDrawerContentDescRes) {
    this(activity, null, drawerLayout, null, openDrawerContentDescRes,
            closeDrawerContentDescRes);
}

2

代码语言:javascript
复制
public ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout,
        Toolbar toolbar, @StringRes int openDrawerContentDescRes,
        @StringRes int closeDrawerContentDescRes) {
    this(activity, toolbar, drawerLayout, null, openDrawerContentDescRes,
            closeDrawerContentDescRes);
}

看一看:第二个构造函数有参数

如果您想要处理UP BUTTON事件,不要使用第二个CONSTUCTOR,而是先使用。

示例:

代码语言:javascript
复制
toggle = new ActionBarDrawerToggle(
            this,
            drawer,
            R.string.navigation_drawer_open,
            R.string.navigation_drawer_close);

getSupportActionBar().setHomeButtonEnabled(true);

setHomeButtonEnabled很重要,没有它,你就不会看到汉堡或向上按钮。

票数 7
EN

Stack Overflow用户

发布于 2017-07-16 15:14:13

我在您的方法中添加了几行代码,以便实现back按钮:

代码语言:javascript
复制
  public void useUpButton(boolean value) {
    ActionBar actionBar = getSupportActionBar();
    if (value) {
        actionBar.setDisplayHomeAsUpEnabled(false);
        toggle.setDrawerIndicatorEnabled(false);
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setDisplayShowHomeEnabled(true);
        toggle.setToolbarNavigationClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }
        });
    } else {
        toggle.setDrawerIndicatorEnabled(true);
        toggle.setToolbarNavigationClickListener(null);
    }
}
票数 3
EN

Stack Overflow用户

发布于 2017-01-15 00:13:33

对于默认行为,使汉堡包按钮打开抽屉,您可以只使用以下代码

代码语言:javascript
复制
    Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(mToolbar);

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle mActionBarDrawerToggle = new ActionBarDrawerToggle(
            this, drawer, mToolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.setDrawerListener(mActionBarDrawerToggle);
    mActionBarDrawerToggle.syncState();

然后,若要覆盖任何子活动中的默认行为,请执行以下操作

代码语言:javascript
复制
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);  // shows the up navigation button instead of the hamburger

    mToolbar.setNavigationOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            finish(); //end current activity
        }
    });

当ActionBarDrawerToggle接受工具栏作为输入时,它会在工具栏上设置自己的NavigationOnClickListener。当单击up按钮时,我们可以重写它来调用我们的代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36083785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档