Отсутствует значок гамбургера навигации по панели инструментов
Я ищу способ отображения значка гамбургера whitout с помощью ящика / DrawerToggle и использовать значок по умолчанию, включенный в Android
установка getSupportActionBar().setDisplayHomeAsUpEnabled(true);
он отображает стрелку назад, но не hambuerger. Другой пост на Stackoverflow (например этой или этой) используйте DrawerLayout или пользовательский drawable. Я не могу найти вектор или png для значка гамбургера на источнике Android.
знаете ли вы, как я могу найти оригинальный значок гамбургера в android / библиотека поддержки? (или как его отобразить)
Примечание: вектор и png можно найти на google.com/design сайт: 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");
}
});
шаблон
<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"/>
стили.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>
15 ответов:
Если вы хотите использовать тот же ящик, что и lollipop, то позвольте мне сказать вам, что это не статическое изображение. Это изображение рисуется в реальном времени классом под названием
DrawerArrowDrawableToggle
. Поэтому для этого нет значка "гамбургер".однако если вы хотите значок гамбургера без анимации вы можете найти его здесь:
http://shreyasachar.com/AndroidAssetStudioвы также можете использовать http://www.google.com/design/spec/resources/sticker-sheets-icons.html#sticker-sheets-icons-components и скачать пакет. Значок навигации имеет имя
ic_menu
и находится на :
чтобы иметь анимированный значок гамбургера, вы должны использовать
DrawerLayout
СActionBarDrawerToggle
и включить значок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(); }
кроме того, вам нужно добавить эти методы в свою деятельность:
@Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); mDrawerToggle.syncState(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); mDrawerToggle.onConfigurationChanged(newConfig); }
У меня была такая же проблема и я нашел самое простое решение здесь:
appcompatv7-v21-навигация-ящик-не-показ-гамбургер-значок
все, что мне нужно было сделать, это позвонить:
mDrawerToggle.syncState();
для этого вам просто нужно написать несколько строк
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.setDrawerListener(toggle); toggle.setDrawerIndicatorEnabled(true); toggle.syncState();
переключить.setDrawerIndicatorEnabled (true); если это ложь, сделайте это правдой или удалите эту строку
Вы можете попробовать сделать свой собственный 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>
тогда в вашем фрагменте / деятельности,
getSupportActionBar().setHomeAsUpIndicator(R.drawable.as_above); getSupportActionBar().setDisplayHomeAsUpEnabled(true);
для других чертежей это может помочь: https://github.com/google/material-design-icons/blob/master/navigation/drawable-anydpi-v21/
вот самое простое решение, которое сработало для меня.
The
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
Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar); mToolbar.setTitle("title"); setSupportActionBar(mToolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_list);
у меня была та же проблема. Получить
ToolBar
а затем установить значок навигацииfinal android.support.v7.widget.Toolbar toolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.toolbar); toolbar.setNavigationIcon(R.drawable.blablabla);
ok чтобы скрыть стрелку назад используйте
getSupportActionBar().setDisplayHomeAsUpEnabled(false); getSupportActionBar().setHomeButtonEnabled(false);
затем найдите значок гамбургера в web ->гамбургер
и, наконец, установите этот drawable в вашем проекте с помощью метода панели действий:
getSupportActionBar().setLogo(R.drawable.hamburger_icon);
может быть, вы можете попробовать это, но вы потеряете анимацию между Стрелкой и гамбургер
@Override protected void onCreate(Bundle arg0) { super.onCreate(arg0); super.setContentView(R.layout.activity_menu_drawer_left); _drawerToggle = new ActionBarDrawerToggle(this, _drawerLayout, R.string.drawer_opened, R.string.drawer_closed) { public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); changeDrawerIconOnDrawerClick(R.drawable.abc_ic_ab_back_mtrl_am_alpha); } /** Called when a drawer has settled in a completely closed state. */ public void onDrawerClosed(View view) { super.onDrawerClosed(view); changeDrawerIconOnDrawerClick(R.drawable.ic_drawer); } }; //to change default icon to hamburger item initially changeDrawerIconOnDrawerClick(R.drawable.ic_drawer); } private void changeDrawerIconOnDrawerClick(int resourceId) { //Drawable icon = ContextCompat.getDrawable(getApplicationContext(), resourceId); Drawable icon = ResourcesCompat.getDrawable(getResources(), resourceId, null); icon.setColorFilter(getResources().getColor(R.color.white), PorterDuff.Mode.SRC_ATOP); _drawerToggle.setDrawerIndicatorEnabled(false); _drawerToggle.setHomeAsUpIndicator(icon); }
замените стрелку вверх по умолчанию на свой собственный drawable
getSupportActionBar().setHomeAsUpIndicator(R.drawable.hamburger);
просто добавьте следующее в свой метод onCreate,
if (getSupportActionBar() != null) { getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); } ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( this, mDrawer, mToolbar, R.string.home_navigation_drawer_open, R.string.home_navigation_drawer_close) { public void onDrawerClosed(View view) { super.onDrawerClosed(view); invalidateOptionsMenu(); } public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); invalidateOptionsMenu(); } @Override public void onDrawerSlide(View drawerView, float slideOffset) { super.onDrawerSlide(drawerView, slideOffset); } }; mDrawer.addDrawerListener(toggle); toggle.syncState();
и в строках.xml,
<string name="home_navigation_drawer_open">Open navigation drawer</string> <string name="home_navigation_drawer_close">Close navigation drawer</string>
используйте этот конструктор в MyActionBarDrawerToggle:
public MyActionBarDrawerToggle(AppCompatActivity host, DrawerLayout drawerlayout, SupportToolbar toolbar, int openedResource, int closedResource) : base(host, drawerlayout, toolbar, openedResource, closedResource) { mHostActivity = host; mOpenedResource = openedResource; mClosedResource = closedResource; }
и вызовите этот метод в mainActivity (используя AppCompatActivity)
mDrawerToggle = new MyActionBarDrawerToggle( this, //Host Activity mDrawerLayout, //DrawerLayout mToolbar, //Toolbar Resource.String.openDrawer, //Opened Message Resource.String.closeDrawer //Closed Message ); mDrawerLayout.AddDrawerListener(mDrawerToggle); SupportActionBar.SetHomeButtonEnabled(true); SupportActionBar.SetDisplayShowTitleEnabled(true); mDrawerToggle.DrawerIndicatorEnabled = true; mDrawerToggle.SyncState();
на
onCreate()
:setSupportActionBar(toolbar); ActionBar actionBar = getSupportActionBar(); drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.open, R.string.close) { @Override public void onDrawerClosed(View drawerView) { super.onDrawerClosed(drawerView); supportInvalidateOptionsMenu(); } @Override public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); supportInvalidateOptionsMenu(); } }; drawerLayout.setDrawerListener(drawerToggle); drawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Backstack.get(MainActivity.this).goBack(); } }); //actionBar.setHomeAsUpIndicator(R.drawable.ic_menu); //getSupportActionBar().setDisplayHomeAsUpEnabled(false); actionBar.setDisplayHomeAsUpEnabled(false); actionBar.setHomeButtonEnabled(true);
и при настройке навигации:
private void setupViewsForKey(Key key) { if(key.shouldShowUp()) { drawerToggle.setDrawerIndicatorEnabled(false); getSupportActionBar().setDisplayHomeAsUpEnabled(true); } else { getSupportActionBar().setDisplayHomeAsUpEnabled(false); drawerToggle.setDrawerIndicatorEnabled(true); } drawerToggle.syncState();