Malzeme tasarımı gezinme çekmecesinde hamburger simgesinin rengi nasıl değiştirilir


88

Bu örneği takip ediyorum

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

ve bu örnekte beyaz hamburger simgesi gösteriyor, onu özelleştirmek ve siyah yapmak istiyorum, ancak onu nasıl değiştireceğime dair hiçbir şey bulamıyorum, herhangi biri onu nasıl özelleştireceğini söyleyebilir mi?

Belirgin

<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>

Ana aktivite

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);
        }
    }

style.xml temasında aşağıdaki satırı <item name = "homeAsUpIndicator"> @ drawable / icon_top_menu </item> kullanın. ,, icon_top_menu yerine özel çekilebilir
Reprator

bunu <item name = "homeAsUpIndicator"> @ drawable / icon_top_menu </item> ekledim .. şimdi ne yapacağınızı söyleyebilir misiniz ..
Aditya

çekilebilir ürününüze istediğiniz renkli hamburger menü simgesiyle başka bir resim ekleyin ve icon_top_menu'yu yukarıdakiyle değiştirin
Nitesh

icon_top_menu doğru resim olmalı?
Aditya

beyaz resim gösteren bir resim <item name = "homeAsUpIndicator"> @ drawable / hamburger </item> ekledim
Aditya

Yanıtlar:


232

Hamburger simgesinin rengini değiştirmek için "style.xml" sınıfını açmanız ve ardından şu kodu denemeniz gerekir:

<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>

Yani <item name="color">@android:color/black</item>çizgiyi kontrol edin . Sadece istediğiniz rengi buradan değiştirin.


yine de bu github.com/codepath/android_guides/wiki/… bağlantısını kontrol edebilirsiniz . İyi öğretici var.
Anand Singh

Bu yüzden MainActivity'de yukarıdaki kodu yazın, çalışacaktır.
Anand Singh

ancak indirmeye izin vermiyor
Aditya


İyi cevap. Bunun yerine, seçilen etkinlikler için simgenin rengini nasıl değiştireceğinizi biliyor musunuz?
AndroidDevBro

63

programlı olarak bu satırı ekle

actionBarDrawerToggle.getDrawerArrowDrawable().setColor(getResources().getColor(R.color.white));

ancak actionBarDrawerToggle'a nasıl referans alabiliriz? (önerilen kodu çalıştırmak, actionBarDrawerToggle'a bir referans olmadığından null döndürür)
Daron

1
Başka yere bakmayın, Sai Gopi N soruyu doğru cevapladı. Daron'a cevap vermek için, ana faaliyetinizde bir örnek oluşturmalısınız. ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle (this, drawerLayout, araç çubuğu, R.string.drawer_open, R.string.drawer_close);
KeepAtIt

15

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

2. style.xml içinde.

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

3. Ardından ana tema sınıfınız (Dosya adı style.xml). “AppTheme” sahibim.

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

13

ColorControlNormal'i geçersiz kılmak da işe yarar.

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

9

Bunun için aşağıdaki şekilde ilerleyebilirsiniz:

protected ActionBarDrawerToggle drawerToggle;

drawerToggle.getDrawerArrowDrawable().setColor(getResources().getColor(R.color.black));

@Gratien Asimbahwe gönderdiğiniz bu kod çökecek çünkü drawerToggle'a referans yok .... nasıl referans alabiliriz?
Daron

8

Projeniz / res / değerler / styles.xml

styles.xml dosyasında şunu ekleyin:

<style name="BaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
  <item name="colorControlNormal">@color/white</item> 
</style>

yalnızca API 20 ve üzeri için
Paixols

2
<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/colorTransparent"

temaları da kaldır

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

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

Bunu kaldır

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

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

sonunda bunu ekle

 <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>

Ana hem için

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

    </style>

1

App: theme = "@ style / MyMaterialTheme" ayarını yaptığınızda bu iyi çalışıyor


Veya android manifest tema adınızı styles.xml dosyanızdaki stil adıyla eşleştirirseniz.
Nic Parmee

0

2 saatlik bir mücadeleden sonra bu yazı bana yardımcı oldu. Androidhive malzeme örneğinde, yeni işlem çubuğu rengi elde etmek için ana rengi başka bir renge değiştirin. Bu aşağıdaki kod, eylem çubuğunda ok işareti almak ve özel metin oluşturmak içindir. Sonunda ok simgesinin appcompat kaynak dosyalarında olacağını ancak kaynaklarda hamburger simgesinin bulunmadığını anladım. mevcutsa, çalışma zamanında değiştirebiliriz

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();

ev düğmesini değiştirmek için @anandsingh yanıtını takip ettim.


2
Bu oldukça hantal ve bakımı zor bir yöntem .. Bunu takip etmekten başka bir şey yapmamanın daha iyi olacağını söyleyebilirim. Bu, bir demo için çalışan bir örnek almanıza yardımcı olabilir.
OlivierM

@Tarun Voora - aradığım şey bu olabilir ... kodu kullanarak değiştirmenin bir yolunu arıyorum ... Bunu önümüzdeki birkaç gün içinde inceleyeceğim ... şimdiden teşekkürler! .. Yine de hamburger menü simgesini arıyorum ... ama bu beni doğru yönde gösterebilir.
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;
                }

0

Rengi yalnızca gezinme çekmecenizin simgesiyle değiştirmek istiyorsanız, şunu deneyin:

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

doğrudan activity_drawer.xml dosyanızda


-1

Hamburger simgesi, eylem ActionBarDrawerTogglesınıfınız tarafından kontrol edilir . Şu anda olduğu gibi bir zorunluluk olan android uyumluluk kitaplıklarını kullanıyorsanız. Rengi şu şekilde değiştirebilirsiniz:

    toggle?.drawerArrowDrawable?.color = ContextCompat.getColor(context, R.color.colorPrimary)

gönderdiğiniz bu kod çökecek çünkü drawerToggle'a referans yok .... nasıl referans alabiliriz?
Daron
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.