Ich suche nach einer Möglichkeit, das Hamburger-Symbol ohne Verwendung von Drawer / DrawerToggle anzuzeigen und das in Android enthaltene Standardsymbol zu verwenden
Durch Einstellen wird getSupportActionBar().setDisplayHomeAsUpEnabled(true);
der Zurückpfeil angezeigt, nicht jedoch der Hambuerger. Andere Beiträge auf Stackoverflow (wie dieser oder dieser ) verwenden das DrawerLayout oder ein benutzerdefiniertes Drawable. Ich kann den Vektor oder das PNG für das Hamburger-Symbol in der Android-Quelle nicht finden.
Wissen Sie, wie ich das ursprüngliche Hamburger-Symbol in der Android / Support-Bibliothek finden kann? (oder wie man es anzeigt)
Hinweis: Vektor und PNG finden Sie auf der Website google.com/design: http://www.google.com/design/spec/resources/sticker-sheets-icons.html#
In meiner Tätigkeit
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");
}
});
Layoutdatei
<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"/>
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>
Antworten:
Wenn Sie dieselbe Schublade wie Lollipop verwenden möchten, lassen Sie mich Ihnen sagen, dass dies kein statisches Bild ist. Dieses Bild wird in Echtzeit von einer Klasse namens aufgerufen
DrawerArrowDrawableToggle
. Es gibt also kein "Hamburger" -Symbol dafür.Wenn Sie jedoch das Hamburger-Symbol ohne Animation möchten, finden Sie es hier:
https://material.io/tools/icons/?icon=menu&style=baseline
quelle
Ein animiertes Hamburger haben Symbol Sie verwenden sollten ,
DrawerLayout
mitActionBarDrawerToggle
und aktivieren Sie das Symbol für dieActionBar
und für dieActionBarDrawerToggle
.Beispiel:
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(); }
Außerdem müssen Sie Ihrer Aktivität folgende Methoden hinzufügen:
@Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); mDrawerToggle.syncState(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); mDrawerToggle.onConfigurationChanged(newConfig); }
quelle
mDrawerToggle.setDrawerIndicatorEnabled(true);
. Wenn Siefalse
als Argument übergeben, sehen Sie backArrow. Vergessen Sie nicht, 2 Methoden ab dem Ende der Antwort zur Aktivitätsklasse 'Dafür müssen Sie nur in einige Zeilen schreiben
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();
toggle.setDrawerIndicatorEnabled (true); Wenn dies falsch ist, machen Sie es wahr oder entfernen Sie diese Zeile
quelle
Hier ist die einfachste Lösung, die für mich funktioniert hat.
Das
ActionBarDrawerToggle
hat zwei Typen Konstruktoren. Einer von ihnen verwendet die Symbolleiste als Parameter. Verwenden Sie diese (zweite unten), um den animierten Hamburger zu erhalten.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
quelle
Sie können versuchen, Ihre eigene Zeichnung für das Hamburger-Symbol wie folgt zu erstellen.
<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>
Dann in Ihrem Fragment / Aktivität,
getSupportActionBar().setHomeAsUpIndicator(R.drawable.as_above); getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Bei anderen Drawables kann dies hilfreich sein: https://github.com/google/material-design-icons/blob/master/navigation/drawable-anydpi-v21/
quelle
Ich hatte das gleiche Problem und fand hier die einfachste Lösung:
appcompatv7-v21-Navigationsschublade-zeigt-nicht-Hamburger-Symbol
Ich musste nur anrufen:
mDrawerToggle.syncState();
quelle
Ich hatte das gleiche Problem. Holen Sie sich das
ToolBar
und setzen Sie dann das Navigationssymbolfinal android.support.v7.widget.Toolbar toolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.toolbar); toolbar.setNavigationIcon(R.drawable.blablabla);
quelle
Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar); mToolbar.setTitle("title"); setSupportActionBar(mToolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_list);
quelle
ok, um den Pfeil zurück zu verstecken
getSupportActionBar().setDisplayHomeAsUpEnabled(false); getSupportActionBar().setHomeButtonEnabled(false);
Dann finden Sie das Hamburger-Symbol im Web -> Hamburger
und schließlich setzen Sie dieses Zeichen in Ihrem Projekt mit der Aktionsleistenmethode:
getSupportActionBar().setLogo(R.drawable.hamburger_icon);
quelle
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); drawer.addDrawerListener(toggle); toggle.syncState();
Es ist Arbeit mit mir
quelle
Vielleicht können Sie dies versuchen, aber Sie verlieren die Animation zwischen Pfeil und Hamburger-Symbol
@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); }
quelle
Ersetzen Sie den Standard-Aufwärtspfeil durch Ihren eigenen Zeichnungspfeil
getSupportActionBar().setHomeAsUpIndicator(R.drawable.hamburger);
quelle
Fügen Sie Ihrer onCreate-Methode einfach Folgendes hinzu:
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();
und In strings.xml,
<string name="home_navigation_drawer_open">Open navigation drawer</string> <string name="home_navigation_drawer_close">Close navigation drawer</string>
quelle
Verwenden Sie diesen Konstruktor in 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; }
und Rufen Sie diese Methode in der mainActivity auf (mit 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();
quelle
in
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);
Und beim Einrichten der UP-Navigation:
private void setupViewsForKey(Key key) { if(key.shouldShowUp()) { drawerToggle.setDrawerIndicatorEnabled(false); getSupportActionBar().setDisplayHomeAsUpEnabled(true); } else { getSupportActionBar().setDisplayHomeAsUpEnabled(false); drawerToggle.setDrawerIndicatorEnabled(true); } drawerToggle.syncState();
quelle
in JetPack funktioniert es für mich
NavigationUI.setupWithNavController(vb.toolbar, nav) vb.toolbar.navigationIcon = ResourcesCompat.getDrawable(resources, R.drawable.icon_home, null)
quelle
vb
Es ist meine Ansicht