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

And*_*ncz 50 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);
Run Code Online (Sandbox Code Playgroud)

我的问题是:我需要如何或在哪里设置主页按钮lisener或我需要听"后退"按钮?我想调用主要的反向方法并使用汉堡包图标设置导航抽屉图标.

Raj*_*har 68

Add this method in onCreate():

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Run Code Online (Sandbox Code Playgroud)

Then override the onOptionItemSelected() as below:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 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
}
Run Code Online (Sandbox Code Playgroud)

定义onBackSTackChangedListener:

private FragmentManager.OnBackStackChangedListener backStackListener = new FragmentManager.OnBackStackChangedListener() {
   @Override
   public void onBackStackChanged() {
       setNavIcon();
   };
}
Run Code Online (Sandbox Code Playgroud)

根据片段的backstack设置图标:

protected void setNavIcon() {
    int backStackEntryCount = getFragmentManager().getBackStackEntryCount();
    drawerToggle.setDrawerIndicatorEnabled(backStackEntryCount == 0);
}
Run Code Online (Sandbox Code Playgroud)

检测何时按下抽屉图标:

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

    switch (item.getItemId()) {
      case x:
         return true;
      default:
         return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

并处理向上按钮:

public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}
Run Code Online (Sandbox Code Playgroud)

这适合我.祝好运.


Jon*_*nik 31

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

跳过所有的setHomeButtonEnabled,setDisplayHomeAsUpEnabledonOptionsItemSelected东西,和相关问题.

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


Sur*_*r D 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" />
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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