操作栏中的后退按钮打开和关闭NavDrawer

时间:2016-01-26 16:50:50

标签: android android-actionbar navigation-drawer

我的主要活动中设置了导航抽屉。在我的一个片段中,我想隐藏汉堡包图标并显示后退箭头(已实现)

   ActionBar bar = mMainActivity.getSupportActionBar();
   bar.setDisplayShowHomeEnabled(true);
   bar.setDisplayHomeAsUpEnabled(true);
   bar.setDefaultDisplayHomeAsUpEnabled(true);

问题是如果我点击它打开抽屉的箭头。所以我添加了这个:mMainActivity.mActionBarDrawerToggle.setDrawerIndicatorEnabled(false);

问题是当我添加此行时,不会显示任何内容。抽屉图标和后退或上移图标。那么有谁能告诉我我做错了什么。?

修改

对于我所做的和未完成的事情似乎有些困惑。 mMainActivity.mActionBarDrawerToggle.setDrawerIndicatorEnabled(false);暂时添加,我再次将其删除,就像我一样,没有图标显示导航抽屉或后退箭头。

以下是我处理菜单项点击的方式:

 @Override
    public boolean onOptionsItemSelected(MenuItem item) {


        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.

        switch (item.getItemId()){
            case R.id.search_badge:
                L.i("search", "search");
                return false;


            case android.R.id.home:
                L.i("home", "home pressed");
                break;

            case R.id.action_done:

                actionDone();
                //for testing
                //checkSelectedInterests();
                //TODO: MLC
                L.i("done", "done pressed");
                break;

            default:
                ;;
        }
        return super.onOptionsItemSelected(item);
    }

然而

 case android.R.id.home:
                L.i("home", "home pressed");
                break;

从未被击中

我希望这能澄清它。因此,此时导航抽屉图标正在隐藏,并显示后退箭头。当我单击后退箭头时,它会打开导航抽屉而不是输入我的开关盒。

2 个答案:

答案 0 :(得分:1)

因此,您的问题分为两部分:

  1. 显示主页按钮或后退按钮:
  2. 仅显示主页按钮:

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        Drawable homeMenu = getResources().getDrawable(R.drawable.ic_menu_white_24dp);
        getSupportActionBar().setHomeAsUpIndicator(homeMenu);
        getSupportActionBar().setHomeButtonEnabled(true);
    

    显示后退箭头而不是主页:

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);
        final Drawable upArrow = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
        upArrow.setColorFilter(getResources().getColor(R.color.fab_material_white), PorterDuff.Mode.SRC_ATOP);
        getSupportActionBar().setHomeAsUpIndicator(upArrow);
    

    这只会更改显示的图像。

    1. 更改汉堡包图标的行为。在您要更改主页按钮行为的活动中,更改菜单项的onclick,如图所示onBackPressed()

      public boolean onOptionsItemSelected(MenuItem item) {
          int id = item.getItemId();
          switch (id) {
              case android.R.id.home:
                  onBackPressed();
                  return true;
              default:
                  return super.onOptionsItemSelected(item);
          }
      }
      
    2. 保持原样导航抽屉的原样。希望这可以帮助。这就是我为我的应用做的。

      编辑: 移除mMainActivity.mActionBarDrawerToggle.setDrawerIndicatorEnabled(false);,然后继续回答的第二部分,执行onBackPressed(),而不是默认的汉堡包功能。

答案 1 :(得分:-1)

听起来你错误地设置了一些东西。看看这个教程,它可以帮助你弄清楚你错过了什么。

编辑这实际上是链接中的第一句话。要使up按钮起作用,您需要在清单中设置父活动。

  

要实现向上导航,第一步是声明哪个   活动是每个活动的适当父级。这样做允许   系统方便导航模式如Up因为   系统可以从清单中确定逻辑父活动   文件。

<application ... >
    ...
    <!-- The main/home activity (it has no parent activity) -->
    <activity
        android:name="com.example.myfirstapp.MainActivity" ...>
        ...
    </activity>
    <!-- A child of the main activity -->
    <activity
        android:name="com.example.myfirstapp.DisplayMessageActivity"
        android:label="@string/title_activity_display_message"
        android:parentActivityName="com.example.myfirstapp.MainActivity" >
        <!-- Parent activity meta-data to support 4.0 and lower -->
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.myfirstapp.MainActivity" />
    </activity>
</application>

Source