“后退按钮”使用getSupportActionbar和appcompat v7工具栏

时间:2014-12-01 14:42:58

标签: android android-appcompat android-toolbar

我正在使用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或我需要听“后退”按钮? 我想调用主要的反向方法并使用汉堡包图标设置导航抽屉图标..

8 个答案:

答案 0 :(得分:70)

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);
    }
}

答案 1 :(得分:41)

你可以这样做:

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
}

定义onBackSTackChangedListener:

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;
}

这对我有用。祝你好运。

答案 2 :(得分:31)

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

跳过所有setHomeButtonEnabledsetDisplayHomeAsUpEnabledonOptionsItemSelected内容以及related issues

相反,在初始化工具栏时,只需设置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();
        }
    });
}

答案 3 :(得分:16)

1-创建Toolbar布局;

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/dark_blue"
    android:minHeight="?attr/actionBarSize"
    local:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    local:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />

2-在您希望toolbar的地方的布局中包含此内容。

3-在您的活动中粘贴以下代码。(扩展ActionBarActivity

private Toolbar mToolbar;

//For Toolbar (Action bar) start
        mToolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(mToolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        mToolbar.setNavigationIcon(R.drawable.ic_back_arrow);
        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }
        });
        getSupportActionBar().setTitle("Event Details");
        //For Toolbar (Action bar) end

4-将后退点击图标更改为您想要的任何内容。

答案 4 :(得分:3)

激活后退按钮:

getActionBar().setDisplayHomeAsUpEnabled(enable);

并聆听onBackPressed()

中的点击次数

显然,您的活动必须延长ActionBarActivity

答案 5 :(得分:2)

您只需设置导航图标,并确保在设置pyodbc

后设置setNavigationOnClickListener()
setSupportActionBar(toolbar)

答案 6 :(得分:1)

清单中的

在您希望后箭头工作的活动下添加这些行

  

android:parentActivityName =&#34;您的父活动名称&#34;

答案 7 :(得分:0)

添加setDisplayHomeAsUpEnabled(true)

    Toolbar toolbar  = findViewById(R.id.toolbar);
    ActionBar actionBar = getSupportActionBar();
    if (actionBar != null) {
        actionBar.setDisplayHomeAsUpEnabled(true);
    }

处理后退按钮

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