【问题标题】:Drawer Indicator on ActionBar compat v7 21ActionBar compat v7 21 上的抽屉指示器
【发布时间】:2014-10-29 10:58:29
【问题描述】:

我的应用程序使用ActionBarCompat 库以及NavigationDrawer 支持库。 我使用ActionBarDrawerToggle appcompat v7 来获取抽屉。 ActionBar 上有一个自定义搜索视图。像这样:

但是抽屉指示器显示错误,在动作搜索视图展开时不显示后退箭头;

我希望它像 PlayStore 应用程序一样显示:

我该怎么做?提前致谢。

【问题讨论】:

    标签: android android-actionbar android-actionbar-compat drawertoggle


    【解决方案1】:

    对此有简单快捷的解决方案。

    首先,您现在应该知道 android.support.v4.app.ActionBarDrawerToggle 已被弃用。 您必须将其替换为 android.support.v7.app.ActionBarDrawerToggle。

    这是一个显示相同的示例。

    DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle(
            this,  mDrawerLayout, mToolbar,
            R.string.navigation_drawer_open, R.string.navigation_drawer_close
        );
        mDrawerLayout.setDrawerListener(mDrawerToggle);

    之后使用支持操作栏,如here in this documentation 所示,然后您的抽屉指示器将正确显示,并在操作搜索视图展开时显示后退箭头。

    记得使用 com.android.support:appcompat-v7:21.0.+"(Api 级别 21) 和 android.support.v7.app.ActionBar

    您可以使用此guide 设置支持库。

    然后你的抽屉指示器将完美地看起来像这样..!!!

    【讨论】:

    • 请仔细阅读我的问题。无论如何,问题已经解决了。谢谢你的回答。
    【解决方案2】:

    您遇到这个问题是因为您在主题中设置了(android:)homeAsUpIndicator。删除该属性将解决您的问题。

    【讨论】:

      【解决方案3】:

      这不是来自ActionBarDrawerToggle 的箭头。我认为 Google 使用 Toolbar 就像他们在 google io 应用程序中一样。在 OnClick 事件中,他们只是用toolbar.setNavigationIcon(R.id.ic_up) 更改工具栏导航图标。而R.id.ic_up - 是一个可绘制的自定义箭头。

      【讨论】:

      • 我试过了。您无需致电toolbar.setNavigationIcon(R.id.ic_up)。默认情况下会发生。
      • 这很奇怪,因为如果你使用新的 AppCompat 库和主题,ActionBar 实际上是工具栏
      【解决方案4】:

      对我来说,在 SO 中发布的解决方案都没有奏效。我不得不查看支持库的内部结构,以找出设置主页图标的原因和时间,但我注意到了一些事情。主要观察是在这个函数中设置了图标:

      android.support.v7.widget.Toolbar#setNavigationIcon(android.graphics.drawable.Drawable)
      

      上线

       mNavButtonView.setImageDrawable(icon);
      

      如果您遇到与我相同的问题并且建议的解决方案都不起作用(设置主题,尝试在工具栏上调用 setNavigationIcon,在 Actionbar 上调用 setHomeAsUpIndicator 甚至其他东西),我建议找到上面提到的函数并将断点放在那里.然后,您可以查看何时调用该函数并识别设置图标的最后一个函数调用(来自 android studio 中的 Frame 窗口)。对我来说,这是同步导航抽屉的活动生命周期方法:

      @Override
      protected void onPostCreate(Bundle savedInstanceState) {
          super.onPostCreate(savedInstanceState);
          mDrawerToggle.syncState();
          mToolbar.setNavigationIcon(R.drawable.ic_hamburger);
      }
      

      我只是添加了最后一行,它起作用了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多