工具栏导航汉堡包图标丢失

Hug*_*sse 68 android android-support-library material-design android-toolbar

我正在寻找一种方法来使用Drawer/DrawerToggle显示汉堡图标whitout并使用Android中包含的默认图标 在此输入图像描述

通过设置getSupportActionBar().setDisplayHomeAsUpEnabled(true);它显示后退箭头而不是hambuerger.Stackoverflow上的其他帖子(像这样或者这样)使用DrawerLayout或自定义drawable.我在Android源上找不到汉堡图标的矢量或png.

你知道如何在android/support库中找到原始的汉堡包图标吗?(或如何显示)

注意:可以在google.com/design网站上找到Vector和png: http ://www.google.com/design/spec/resources/sticker-sheets-icons.html#

在我的活动中

mToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);

mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Log.d(LOG_TAG, "navigation clicked");
    }
});
Run Code Online (Sandbox Code Playgroud)

布局文件

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    app:theme="@style/ThemeOverlay.AppCompat.ActionBar"/>
Run Code Online (Sandbox Code Playgroud)

Styles.xml

<!-- Base application theme. -->
<style name="Theme.AppTheme" parent="Theme.AppCompat.Light.NoActionBar">


    <item name="colorPrimary">@color/primaryDef</item>
    <item name="colorPrimaryDark">@color/primaryDarkDef</item>
    <item name="colorAccent">@color/primaryDef</item>

    <!-- Remove the actionbar shadow-->
    <item name="android:windowContentOverlay">@null</item>
</style>
Run Code Online (Sandbox Code Playgroud)

Ped*_*ira 39

如果你想使用与棒棒糖相同的抽屉,那么让我告诉你,这不是静态图像.该图像由一个叫做的类实时绘制DrawerArrowDrawableToggle.所以没有"汉堡"图标.

但是,如果你想要没有动画的汉堡包图标,你可以在这里找到它:

http://shreyasachar.com/AndroidAssetStudio

您还可以使用http://www.google.com/design/spec/resources/sticker-sheets-icons.html#sticker-sheets-icons-components并下载该包.导航图标具有名称DrawerArrowDrawableToggle,它位于DrawerArrowDrawableToggle文件夹中:

https://github.com/google/material-design-icons/blob/master/navigation/drawable-xxxhdpi/ic_menu_grey600_48dp.png

在此输入图像描述


moh*_*hax 32

有动画图标汉堡包,你应该使用DrawerLayoutActionBarDrawerToggle并启用的图标ActionBar和为ActionBarDrawerToggle.

例:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle mDrawerToggle;

setSupportActionBar(toolbar);
final ActionBar actionBar = getSupportActionBar();

if (actionBar != null)
{
   actionBar.setDisplayHomeAsUpEnabled(true);
   mDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.hello_world, R.string.hello_world)
   {

      public void onDrawerClosed(View view)
      {
         supportInvalidateOptionsMenu();
         //drawerOpened = false;
      }

      public void onDrawerOpened(View drawerView)
      {
         supportInvalidateOptionsMenu();
         //drawerOpened = true;
      }
   };
   mDrawerToggle.setDrawerIndicatorEnabled(true);
   drawerLayout.setDrawerListener(mDrawerToggle);
   mDrawerToggle.syncState();
}
Run Code Online (Sandbox Code Playgroud)

此外,您需要将这些方法添加到您的Activity:

@Override
protected void onPostCreate(Bundle savedInstanceState)
{
    super.onPostCreate(savedInstanceState);
    mDrawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);
    mDrawerToggle.onConfigurationChanged(newConfig);
}
Run Code Online (Sandbox Code Playgroud)

  • @SibeliusSeraphini,这一行执行“mDrawerToggle.setDrawerIndicatorEnabled(true);”。如果您传递“false”作为参数,您将看到后退箭头。不要忘记从答案末尾添加 2 个方法到活动类' (2认同)
  • @mohax我需要添加这一行:mDrawerToggle.syncState(); 在drawerLayout.setDrawerListener(mDrawerToggle)之后; (2认同)

Viv*_*rai 14

为此你只需要写一些行

   DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
   ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
   drawer.addDrawerListener(toggle);
   toggle.setDrawerIndicatorEnabled(true);
   toggle.syncState();
Run Code Online (Sandbox Code Playgroud)

toggle.setDrawerIndicatorEnabled(真); 如果这是假的,则将其设为true或删除此行


小智 12

您可以尝试为这样的汉堡包图标制作自己的drawable.

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportHeight="24.0"
    android:viewportWidth="24.0">
    <path
        android:fillColor="#ffffff"
        android:pathData="M3,18h18v-2L3,16v2zM3,13h18v-2L3,11v2zM3,6v2h18L21,6L3,6z" />
</vector>
Run Code Online (Sandbox Code Playgroud)

然后在你的片段/活动中,

getSupportActionBar().setHomeAsUpIndicator(R.drawable.as_above);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Run Code Online (Sandbox Code Playgroud)

对于其他drawable,这可能会有所帮助:https://github.com/google/material-design-icons/blob/master/navigation/drawable-anydpi-v21/


Thu*_*ten 9

这是对我有用的最简单的解决方案.

ActionBarDrawerToggle有两种类型的构造函数.其中一个以工具栏作为参数.使用它(下面的第二个)来获得动画汉堡包.

ActionBarDrawerToggle(this, mDrawerLayout, R.string.content_desc_drawer_open, 
R.string.content_desc_drawer_close);

ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.content_desc_drawer_open, 
R.string.content_desc_drawer_close);`  //use this constructor
Run Code Online (Sandbox Code Playgroud)


Kac*_*ski 9

我有同样的问题,我在这里找到了最简单的解决方案:

appcompatv7-V21-导航抽屉未示出-汉堡包图标

我所要做的只是打电话:

mDrawerToggle.syncState();
Run Code Online (Sandbox Code Playgroud)


Mik*_*nti 7

我有同样的问题.获取ToolBar然后设置导航图标

final android.support.v7.widget.Toolbar toolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.toolbar);
toolbar.setNavigationIcon(R.drawable.blablabla);
Run Code Online (Sandbox Code Playgroud)


Tar*_*ora 6

    Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar);
    mToolbar.setTitle("title");
    setSupportActionBar(mToolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_list);
Run Code Online (Sandbox Code Playgroud)


Sto*_*eev 5

好的隐藏箭头使用

getSupportActionBar().setDisplayHomeAsUpEnabled(false);
getSupportActionBar().setHomeButtonEnabled(false);
Run Code Online (Sandbox Code Playgroud)

然后在网页上找到汉堡包图标 - > 汉堡包

最后,使用操作栏方法在项目中设置此drawable:

getSupportActionBar().setLogo(R.drawable.hamburger_icon);
Run Code Online (Sandbox Code Playgroud)

  • 我正在搜索支持lib或android sdk中的汉堡包图标. (2认同)