So ändern Sie die Farbe des Hamburger-Symbols in der Materialdesign-Navigationsschublade

85

Ich folge diesem Beispiel

http://www.androidhive.info/2015/04/android-getting-started-with-material-design/

und in diesem Beispiel wird das Hamburger-Symbol weiß angezeigt. Ich möchte es anpassen und schwarz machen, aber ich kann nichts finden, um es zu ändern. Kann jemand sagen, wie es angepasst werden soll?

Manifest

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="info.androidhive.materialdesign" >


    <uses-permission android:name="android.permission.INTERNET"></uses-permission>

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/MyMaterialTheme" >
        <activity
            android:name=".activity.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Stil

<resources>

    <style name="MyMaterialTheme" parent="MyMaterialTheme.Base">

    </style>

    <style name="MyMaterialTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="homeAsUpIndicator">@drawable/hamburger</item>
    </style>

</resources>

Hauptaktivität

public class MainActivity extends AppCompatActivity implements FragmentDrawer.FragmentDrawerListener {

    private static String TAG = MainActivity.class.getSimpleName();

    private Toolbar mToolbar;
    private FragmentDrawer drawerFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       mToolbar = (Toolbar) findViewById(R.id.toolbar);

        setSupportActionBar(mToolbar);
        getSupportActionBar().setDisplayShowHomeEnabled(true);

        drawerFragment = (FragmentDrawer)
                getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer);
        drawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), mToolbar);
        drawerFragment.setDrawerListener(this);

        // display the first navigation drawer view on app launch
        displayView(0);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        if(id == R.id.action_search){
            Toast.makeText(getApplicationContext(), "Search action is selected!", Toast.LENGTH_SHORT).show();
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onDrawerItemSelected(View view, int position) {
        displayView(position);
    }

    private void displayView(int position) {
        Fragment fragment = null;
        String title = getString(R.string.app_name);
        switch (position) {
            case 0:
                fragment = new HomeFragment();
                title = getString(R.string.title_home);
                break;
            case 1:
                fragment = new FriendsFragment();
                title = getString(R.string.title_friends);
                break;
            case 2:
                fragment = new MessagesFragment();
                title = getString(R.string.title_messages);
                break;
            case 3:
                fragment = new ContactUsFragment();
                title = getString(R.string.title_contactus);
                break;
            case 4:
                fragment = new AboutUsFragment();
                title = getString(R.string.title_aboutus);
                break;
            default:
                break;
        }

        if (fragment != null) {
            FragmentManager fragmentManager = getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.replace(R.id.container_body, fragment);
            fragmentTransaction.commit();

            // set the toolbar title
            getSupportActionBar().setTitle(title);
        }
    }
Aditya
quelle
Verwenden Sie einfach die folgende Zeile <item name = "homeAsUpIndicator"> @ drawable / icon_top_menu </ item> im style.xml-Thema. ,, Ersetzen Sie icon_top_menu durch custom drawable
Reprator
Ich füge diesen <item name = "homeAsUpIndicator"> @ drawable / icon_top_menu </ item> hinzu. Jetzt können Sie sagen, was zu tun ist.
Aditya
Fügen Sie ein weiteres Bild in Ihr Zeichenbild mit dem gewünschten Farb-Burger-Menüsymbol ein und ersetzen Sie icon_top_menu durch das oben angegebene
Nitesh
icon_top_menu sollte Bild sein, oder?
Aditya
Ich habe ein Bild hinzugefügt <item name = "homeAsUpIndicator"> @ drawable / hamburger </ item> sein Stil zeigt weißes Bild
Aditya

Antworten:

227

Um die Farbe des Hamburger-Symbols zu ändern, müssen Sie die Klasse "style.xml" öffnen und dann diesen Code ausprobieren:

<style name="MyMaterialTheme" parent="MyMaterialTheme.Base">

</style>

<style name="MyMaterialTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
</style>

<style name="DrawerArrowStyle" parent="@style/Widget.AppCompat.DrawerArrowToggle">
    <item name="spinBars">true</item>
    <item name="color">@android:color/black</item>
</style>

Überprüfen Sie also die <item name="color">@android:color/black</item>Zeile. Ändern Sie hier einfach Ihre gewünschte Farbe.

Anand Singh
quelle
Auf jeden Fall können Sie diesen Link unter github.com/codepath/android_guides/wiki/… überprüfen . Es hat ein gutes Tutorial.
Anand Singh
Schreiben Sie also den obigen Code in Ihre MainActivity, es wird funktionieren.
Anand Singh
aber es erlaubt nicht zum Download
Aditya
Lassen Sie uns diese Diskussion im Chat fortsetzen .
Aditya
Gute Antwort. Möchten Sie stattdessen die Farbe des Symbols für ausgewählte Aktivitäten ändern?
AndroidDevBro
58

Fügen Sie diese Zeile programmgesteuert hinzu

actionBarDrawerToggle.getDrawerArrowDrawable().setColor(getResources().getColor(R.color.white));
Sai Gopi ich
quelle
Aber wie bekommen wir einen Verweis auf actionBarDrawerToggle? (Wenn Sie Ihren vorgeschlagenen Code ausführen, wird null zurückgegeben, da wir keinen Verweis auf actionBarDrawerToggle haben.)
Daron
1
Suchen Sie nicht weiter, Sai Gopi N hat die Frage richtig beantwortet. Um Daron zu beantworten, müssen Sie in Ihrer Hauptaktivität eine Instanz erstellen. ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle (this, drawerLayout, Symbolleiste, R.string.drawer_open, R.string.drawer_close);
KeepAtIt
13

Das Überschreiben von colorControlNormal funktioniert ebenfalls.

<item name="colorControlNormal">@android:color/holo_red_dark</item>
user1689757
quelle
13

1.In Color.xml.<color name="hamburgerBlack">#000000</color>

2.In style.xml.

<style name="DrawerIcon" parent="Widget.AppCompat.DrawerArrowToggle">
        <item name="color">@color/hamburgerBlack</item>
    </style>

3. Dann Ihre Hauptthemenklasse (Dateiname style.xml). Ich habe "AppTheme".

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
         <item name="drawerArrowStyle">@style/DrawerIcon</item>
    </style>
Jigish
quelle
8

Dazu können Sie wie folgt vorgehen:

protected ActionBarDrawerToggle drawerToggle;

drawerToggle.getDrawerArrowDrawable().setColor(getResources().getColor(R.color.black));
venky
quelle
@Gratien Asimbahwe Dieser Code, den Sie gepostet haben, stürzt ab, da es keinen Verweis auf drawerToggle gibt. Wie erhalten wir einen Verweis?
Daron
6

yourProject / res / values ​​/ styles.xml

in der styles.xml hinzufügen:

<style name="BaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
  <item name="colorControlNormal">@color/white</item> 
</style>
Herr Hosseini
quelle
nur für API 20 und
höher
2
<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/colorTransparent"

Entfernen Sie auch Themen

    android:theme="@style/AppThemeNoActionBar.AppBarOverlay">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
      ***

entferne das

*** app: popupTheme = "@ style / AppThemeNoActionBar.PopupOverlay">

</android.support.design.widget.AppBarLayout>

füge dies endlich hinzu

 <style name="AppThemeNoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>

Zu deinem Haupthäm

        <item name="colorControlNormal">@color/colorRedTitle</item>

    </style>
Gutes Leben
quelle
1

Dies funktioniert gut, wenn Sie app: theme = "@ style / MyMaterialTheme" festlegen.

Sudeep Kaushik
quelle
Oder wenn Sie den Namen Ihres Android-Manifest-Themas mit dem Stilnamen in Ihrer styles.xml abgleichen.
Nic Parmee
0

Nach einem Kampf von 2 Stunden hat mir dieser Beitrag geholfen. Ändern Sie im Beispiel für ein Androidhive-Material die Primärfarbe in eine andere, um eine neue Farbe für die Aktionsleiste zu erhalten. Der folgende Code dient zum Abrufen der Pfeilmarkierung in der Aktionsleiste und zum Erstellen von benutzerdefiniertem Text. Schließlich habe ich verstanden, dass das Pfeilsymbol in Appcompat-Ressourcendateien enthalten ist, das Hamburger-Symbol jedoch nicht in den Ressourcen. Wenn es vorhanden ist, können wir es zur Laufzeit ändern

setSupportActionBar(toolbar);
        final Drawable upArrow = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
        upArrow.setColorFilter(getResources().getColor(R.color.black), PorterDuff.Mode.SRC_ATOP);
        getSupportActionBar().setHomeAsUpIndicator(upArrow);
        getSupportActionBar().setTitle(Html.fromHtml("<font color=\"black\">" + "All Addresses" + "</font>"));
        getSupportActionBar().show();

Zum Ändern der Home-Taste folgte ich der Antwort von @anandsingh.

Tarun Voora
quelle
2
Das ist ein ziemlich hackiger und schwer zu pflegender Weg. Ich würde sagen, es wäre besser, nichts zu tun, als dem zu folgen. Dies könnte jedoch dazu beitragen, dass ein Beispiel für eine Demo funktioniert.
OlivierM
@ Tarun Voora - das könnte genau das sein, wonach ich suche ... ich suche nach einer Möglichkeit, es mithilfe von Code zu ändern ... ich werde dies in den nächsten Tagen untersuchen ... danke im Voraus! .. Ich suche zwar nach dem Hamburger-Menüsymbol ... aber das kann mich in die richtige Richtung weisen.
Daron
0
//----------your own toolbar-----------------------------

            <?xml version="1.0" encoding="utf-8"?>
            <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:elevation="4dp"
                android:padding="1dp"
                android:background="@color/blue"
                >
                </android.support.v7.widget.Toolbar>

    //-----------Main activity xml, add your own toolbar-----------------------------------------------
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.v1technologies.sgcarel.FrameActivity">
        <include
            android:id="@+id/toolbar"
            layout="@layout/toolbar"
            />
        <FrameLayout
            android:padding="2dp"
            android:layout_marginTop="70dp"
            android:id="@+id/frame_frame_activity"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

    </FrameLayout>
    </RelativeLayout>


        //----  In your activity-----------------------

                   toolbar = (Toolbar) findViewById(R.id.toolbar);       
                    setSupportActionBar(toolbar);

            //===========================================================================

             @Override
                public boolean onCreateOptionsMenu(Menu menu) {
                    // Inflate the menu; this adds items to the action bar if it is present.
                    getMenuInflater().inflate(R.menu.menu_main, menu);

                    int color = Color.parseColor("#334412");
                    final PorterDuffColorFilter colorFilter = new PorterDuffColorFilter(color, PorterDuff.Mode.SRC_ATOP);

                    for (int i = 0; i < toolbar.getChildCount(); i++) {
                        final View v = toolbar.getChildAt(i);

                        if (v instanceof ImageButton) {
                            ((ImageButton) v).setColorFilter(colorFilter);
                        }
                    }
                    return true;
                }
Raktim Bhattacharya
quelle
0

Wenn Sie die Farbe nur in das Symbol Ihrer Navigationsschublade ändern möchten, versuchen Sie Folgendes:

<android.support.design.widget.NavigationView
    app:itemIconTint="@color/thecolorthatyouwant"
 />

direkt in Ihrer activity_drawer.xml

Gabry_Neo
quelle
0

Das Hamburger-Symbol wird von Ihrer Aktionsklasse gesteuert ActionBarDrawerToggle. Wenn Sie die Android-kompatiblen Bibliotheken verwenden, ist dies derzeit ein Muss. Sie können die Farbe folgendermaßen ändern:

    toggle?.drawerArrowDrawable?.color = ContextCompat.getColor(context, R.color.colorPrimary)
Ememobong AkpanEkpo
quelle
Dieser von Ihnen gepostete Code stürzt ab, da kein Verweis auf drawerToggle vorhanden ist. Wie erhalten wir einen Verweis?
Daron