webentwicklung-frage-antwort-db.com.de

So ändern Sie die Symbole der Symbolleisten-Navigation und des Überlaufmenüs (appcompat v7)?

Ich habe Schwierigkeiten mit der v7 Toolbar. Was für ActionBar eine einfache Aufgabe war, erscheint jetzt zu komplex. Unabhängig von dem von mir eingestellten Stil kann ich weder das Navigationssymbol (das eine Schublade öffnet) noch das Überlaufmenüsymbol (das ein Menü öffnet) ändern. 

Ich habe also eine Toolbar

<Android.support.v7.widget.Toolbar
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:background="@color/ghex"
    Android:minHeight="?attr/actionBarSize"
    app:theme="@style/ThemeOverlay.AppCompat.Light"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    >

Ich codiere es sieht so aus

//before in the code I do
mToolbar = (Toolbar) findViewById(R.id.toolbar);

private void initToolbar() {
    setSupportActionBar(mToolbar);
    getSupportActionBar().setDisplayShowTitleEnabled(false);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);
}

Jetzt muss ich die Drawable für diese beiden Symbole ändern.

Wie mache ich das für compat v7 Toolbar? Ich denke, ich müsste den Pfeil sichtbar ändern, wenn die Schublade geöffnet ist (Android 5.0).

27
sandalone

Um das Navigationssymbol zu ändern, können Sie Folgendes verwenden:

Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
setSupportActionBar(toolbar);
toolbar.setNavigationIcon(R.drawable.my_icon);

Um das Überlaufsymbol zu ändern, können Sie einen Stil wie folgt definieren:

<style name="AppTheme.Base" parent="Theme.AppCompat.Light">
    <item name="actionOverflowButtonStyle">@style/OverFlow</item>
</style>

<style name="OverFlow" parent="Widget.AppCompat.ActionButton.Overflow">
    <item name="Android:src">@drawable/my_overflow_menu</item>
</style>

In jedem Fall ist es nicht ratsam, ein Standardsymbol wie das Überlaufmenü zu ändern.

Wenn Sie die Farbe des Symbols ändern möchten, können Sie Folgendes verwenden:

<Android.support.v7.widget.Toolbar
  app:theme="@style/ThemeToolbar" />


<style name="ThemeToolbar" parent="Theme.AppCompat.Light">

   <!-- navigation icon color -->
   <item name="colorControlNormal">@color/my_color</item>

    <!-- color of the menu overflow icon -->
    <item name="Android:textColorSecondary">@color/my_color</item>
</style>
102
    mToolbar.setNavigationIcon(R.mipmap.ic_launcher);
    mToolbar.setOverflowIcon(ContextCompat.getDrawable(this, R.drawable.ic_menu));
17
androidmalin

Für das richtige Menü können Sie es tun: 

public static Drawable setTintDrawable(Drawable drawable, @ColorInt int color) {
            drawable.clearColorFilter();
            drawable.setColorFilter(color, PorterDuff.Mode.SRC_IN);
            drawable.invalidateSelf();
            Drawable wrapDrawable = DrawableCompat.wrap(drawable).mutate();
            DrawableCompat.setTint(wrapDrawable, color);
            return wrapDrawable;
        }

Und in deiner Tätigkeit

@Override
 public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_profile, menu);
        Drawable send = menu.findItem(R.id.send);
        Drawable msg = menu.findItem(R.id.message);
        DrawableUtils.setTintDrawable(send.getIcon(), Color.WHITE);
        DrawableUtils.setTintDrawable(msg.getIcon(), Color.WHITE);
        return true;
    }

Das ist das Ergebnis:

 enter image description here

4
chry

Es ist ein einfacher, einfacher und besserer Ansatz, wenn nur die Farbe des Symbols "Hamburger/zurück" geändert werden muss. 

Es ist besser, da nur die Farbe des gewünschten Symbols geändert wird, während colorControlNormal und Android:textColorSecondary auch andere Unteransichten der Symbolleiste beeinflussen können.

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
</style>

<style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle">
    <item name="spinBars">true</item>
    <item name="color">@Android:color/white</item>
</style>
2
Sachin Gupta

Alle obigen Lösungen funktionierten für mich in API 21 oder höher, jedoch nicht in API 19 (KitKat). In den früheren Versionen war es eine gute Sache, eine kleine Änderung vorzunehmen. Beachten Sie Widget.Holo anstelle von Widget.AppCompat

<style name="OverFlowStyle"    parent="@Android:style/Widget.Holo.ActionButton.Overflow">
    <item name="Android:src">@drawable/ic_overflow</item>
</style>
1
Eric B.

fügen Sie Ihrem Standarddesign diese Zeile hinzu;

   <item name="colorControlNormal">@color/my_color</item>
1
alicanozkara

wenn Sie Ihre Symbole in einen Vector ändern möchten, erstellen Sie ein neues . und dann in Ihrem Activity.Java:

Toolbar toolbar = findViewById(R.id.your_toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
toolbar.setNavigationIcon(R.drawable.your_icon);
mToolbar.setOverflowIcon(ContextCompat.getDrawable(this, R.drawable.your_icon2));

Um die Farbe von Vector icon zu ändern, gehen Sie zu Ihrer Vector XML-Datei .. In diesem Fall wird es your_icon.xml sein. Es sieht dann so aus:

<vector xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:width="24dp"
    Android:height="24dp"
    Android:viewportWidth="24.0"
    Android:viewportHeight="24.0">
<path
    Android:fillColor="@color/Your_Color"
    Android:pathData="M15.41,7.41L14,6l-6,6 6,6 1.41,-1.41L10.83,12z"/>

Beachten Sie, dass wir diese Attribute verwendet haben, um die Farbe des Vektors festzulegen: 

Android:fillColor="@color/Your_Color"

Bearbeiten : Sie können keine Farbe aus colors.XML oder anderswo verwenden. Die Farbe muss direkt in der XML-Datei des Vector dekaliert werden. Sie sieht also so aus: 

Android:fillColor="#FFF"
1

So ändern Sie die Farbe für Optionsmenüelemente, die Sie verwenden können

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
    menuInflater.inflate(R.menu.your_menu, menu)

    menu?.forEach {
        it.icon.setTint(Color.your_color)
    }

    return true
}
0
Belogurow

Sie können diesen Code verwenden

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.toolbar_Like:
            item.setIcon(R.drawable.is_like);
            break;
    }
    return true;
}
0
Diako Hasani

welches Thema Sie in der Aktivität verwendet haben, fügen Sie unter einem Zeilencode hinzu

für weiß

<style name="AppTheme.NoActionBar">
      <item name="Android:tint">#ffffff</item>
  </style>

or 
 <style name="AppThemeName" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="Android:tint">#ffffff</item>
</style>

für schwarz 

   <style name="AppTheme.NoActionBar">
      <item name="Android:tint">#000000</item>
  </style>

or 
 <style name="AppThemeName" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="Android:tint">#000000</item>
</style>
0

wenn Sie Menüelementsymbole, Pfeilsymbole (Zurück/Aufwärts) und 3-Punkt-Symbole ändern möchten, können Sie Android:tint verwenden.

  <style name="ToolbarTheme" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="Android:tint">@color/your_color</item>
  </style>
0
user25