当前位置: 首页 > 知识库问答 >
问题:

使用getSupport Actionbar和appcompat v7工具栏的“后退按钮”

陆绪
2023-03-14

我正在使用Appcompat V7库中的新工具栏,我正在制作一个带有抽屉菜单和片段的应用程序。

在一些片段中,我不想显示汉堡包图标,而是箭头。。。很好,我是这样做的:

mDrawerToggle.setDrawerIndicatorEnabled(false);

mDrawerToggle.syncState();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);

getSupportActionBar().setHomeAsUpIndicator(R.drawable.abc_ic_ab_back_mtrl_am_alpha);

我的问题是:如何或在哪里我需要设置主页按钮lisener或什么我需要听“返回”按钮?我想调用主反压方法,并用汉堡图标设置抽屉菜单图标...

共有3个答案

翟嘉志
2023-03-14

不确定这是否适用于OP,但在许多情况下,这可能是使用AppCompat工具栏实现后退按钮的最简单选项。

跳过所有setHomeButtonEn郊游setDisplayHomeAsUpEn郊游onOptionsItemSelec的内容以及相关问题。

相反,初始化工具栏时,只需为其设置1)导航图标和2)导航OnClickListener:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

if (enableBackNavigation) {
    toolbar.setNavigationIcon(R.drawable.ic_back);
    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onBackPressed();
        }
    });
}
邵耀
2023-03-14

你可以这样做:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);  
    toolbar = (Toolbar)findViewById(R.id.toolbar);
    if (toolbar != null) {
      setSupportActionBar(toolbar);
      getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }

    setUpNavigationDrawer();

    getFragmentManager().addOnBackStackChangedListener(backStackListener); // listen to the backstack of the fragment manager
}

定义OnBackbackChangedListener:

private FragmentManager.OnBackStackChangedListener backStackListener = new FragmentManager.OnBackStackChangedListener() {
   @Override
   public void onBackStackChanged() {
       setNavIcon();
   };
}

根据碎片的后退设置图标:

protected void setNavIcon() {
    int backStackEntryCount = getFragmentManager().getBackStackEntryCount();
    drawerToggle.setDrawerIndicatorEnabled(backStackEntryCount == 0);
}

当抽屉图标被按下时检测:

public boolean onOptionsItemSelected(MenuItem item) {
    if (drawerToggle.isDrawerIndicatorEnabled() && drawerToggle.onOptionsItemSelected(item)) {
        return true;
    }

    switch (item.getItemId()) {
      case x:
         return true;
      default:
         return false;
    }
}

并处理向上按钮:

public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}

这对我有用。祝你好运。

公孙驰
2023-03-14

在onCreate()中添加此方法:

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

然后覆盖onOptionItemSelected(),如下所示:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}
 类似资料:
  • 我可以在工具栏中看到后退按钮,但当我单击时,什么都没有发生。它不会,但当我删除的整个实现时,后退按钮工作正常。我需要在需要时在两者之间切换。提前感谢。

  • 我试图在中间显示我的工具栏标题,为此我使用以下答案中给出的方法:-工具栏中心标题 但是,当我通过以下代码在我的中启用后退按钮时: 工具栏的标题不显示在中间,但向右稍微偏离中心。 如何实现居中标题而不受后退按钮或菜单栏的影响?

  • 我的所有片段都是通过ActionBarActivity(mainActivity)控制的,在mainActivity中实现了一个抽屉布局,所有子片段都是通过抽屉布局的列表项点击来推送的。我面临的问题是,在通过抽屉布局推送片段后,我想将抽屉图标更改为工具栏的后图标,以便用户可以导航到前一个片段并处理Android的回调。R、 id.home位于同一片段内或主活动内。 我使用的代码是: MainAct

  • 在这些Android文档的帮助下。我正在尝试做一个操作栏后退按钮。我得到一个操作栏后退按钮,如下图: 输出: 但我的问题是在看了画廊的图片后,我按下了动作栏后退按钮。 然后它不工作了。但它必须回到上一页。 下面列出了代码。 厨房活动。java: GalleryDetailFragment。java: 如果你知道如何解决这些问题,任何人都可以帮助我。谢谢你。

  • 我不能改变返回按钮的颜色。我用的是工具栏材质设计。在我的应用程序中,我应用了工具栏的黑色背景,但默认情况下,背面设计是黑色的,这就是为什么我只想更改此返回按钮的颜色。请给我解决办法。 非常感谢。

  • 我有标准抽屉菜单,但现在我试图修改它,使用工具栏。 之前我的代码看起来像:MainActivity.java NavigationDrawerFragment.java 现在我修改了代码:MainActivity。Java语言 NavigationDrawerFragment.java 并应显示HomeUp功能: 但未显示后退箭头 我试过打电话 因此,返回箭头出现,但单击它没有效果