सामग्री डिजाइन नेविगेशन दराज में हैमबर्गर आइकन का रंग कैसे बदलें


88

मैं इस उदाहरण का अनुसरण कर रहा हूं

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

और इस उदाहरण में यह हैमबर्गर आइकन सफेद दिखा रहा है, मैं इसे अनुकूलित करना चाहता हूं और इसे काला करना चाहता हूं, लेकिन मैं इसे कैसे बदल सकता हूं, इसके बारे में कुछ भी नहीं पा रहा हूं, क्या कोई बता सकता है कि इसे कैसे अनुकूलित किया जाए?

प्रकट

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

अंदाज

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

मुख्य गतिविधि

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

बस का उपयोग निम्न पंक्ति <आइटम नाम = "homeAsUpIndicator"> @ drawable / icon_top_menu </ मद> style.xml विषय में ,, कस्टम drawable साथ icon_top_menu बदलें।
Reprator

मैं इस <आइटम का नाम = "homeAsUpIndicator"> @ drawable / icon_top_menu </ item> जोड़ रहा हूं .. अब क्या आप बता सकते हैं कि क्या करना है ..
आदित्य

वांछित रंगीन बर्गर मेनू आइकन के साथ अपने चित्र में एक और छवि जोड़ें और ऊपर में icon_top_menu को बदलें
Nitesh

icon_top_menu छवि सही होनी चाहिए?
आदित्य

मैंने एक छवि जोड़ी <आइटम का नाम = "homeAsUpIndicator"> @ drawable / हैमबर्गर </ आइटम> इसकी छवि सफेद छवि दिखा रही है
आदित्य

जवाबों:


232

हैमबर्गर आइकन का रंग बदलने के लिए आपको "style.xml" क्लास खोलनी होगी, फिर इस कोड को आज़माएँ:

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

तो <item name="color">@android:color/black</item>लाइन की जाँच करें । बस अपना वांछित रंग यहां बदलें।


वैसे भी आप इस github.com/codepath/android_guides/wiki/… लिंक की जाँच कर सकते हैं । इसका ट्यूटोरियल अच्छा है।
आनंद सिंह

इसलिए अपने MainActivity में कोड के ऊपर लिखें, यह काम करेगा।
आनंद सिंह

लेकिन इसकी
आदित्य


अच्छा उत्तर। क्या आपको पता होगा कि चयनित गतिविधियों के लिए आइकन का रंग कैसे बदलना है?
AndroidDevBro

63

क्या यह प्रोग्रामेटिक रूप से इस लाइन को जोड़ते हैं

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

लेकिन हमें कार्रवाई करने के लिए एक संदर्भ कैसे मिलता है। (अपने सुझाव कोड चल रहा अशक्त वापस आ जाएगी, क्योंकि हम actionBarDrawerToggle के लिए एक संदर्भ नहीं है)
Daron

1
आगे देखें, साईं गोपी एन ने सवाल का सही उत्तर दिया। डैरन का जवाब देने के लिए, आपको अपनी मुख्य गतिविधि में एक उदाहरण बनाना होगा। ActionBarDrawerToggle action
KeepAtIt

15

1. रंग में ।xml।<color name="hamburgerBlack">#000000</color>

2. शैली में।एक्सएमएल।

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

3. फिर आपके मुख्य विषय वर्ग (फ़ाइल नाम style.xml)। मेरे पास "AppTheme" है।

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

13

ओवरराइडिंग कलरकंट्रोल नॉर्मल भी काम करता है।

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

9

उसके लिए आप निम्नानुसार आगे बढ़ सकते हैं:

protected ActionBarDrawerToggle drawerToggle;

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

@Gratien Asimbahwe आपके द्वारा पोस्ट किया गया यह कोड क्रैश हो जाएगा क्योंकि ड्राअरटॉगल का कोई संदर्भ नहीं है .... हमें एक संदर्भ कैसे मिलेगा?
डैरन

8

yourProject / res / values ​​/ styles.xml

शैलियों में। xml जोड़ें:

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

केवल एपीआई 20 और ऊपर के लिए
पैक्सॉल्स

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

थीम भी निकालें

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

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

हटाए इसे

*** एप्लिकेशन: popupTheme = "@ शैली / AppThemeNoActionBar.PopupOverlay">

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

अंत में इसे जोड़ें

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

आपके मुख्य हीम को

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

    </style>

1

जब आप ऐप सेट करते हैं तो यह ठीक काम करता है: विषय = "@ शैली / MyMaterialTheme"


या यदि आप अपनी android मे अपनी थीम के नाम से मेल खाते हैं, तो अपनी स्टाइल में नाम लिखें। xml।
निक परमी

0

2 घंटे के संघर्ष के बाद, इस पोस्ट ने मेरी मदद की। Androidhive सामग्री उदाहरण में, नए एक्शनबार रंग प्राप्त करने के लिए प्राथमिक रंग को दूसरे में बदलें। यह नीचे कोड एक्शन बार पर तीर का निशान पाने और कस्टम टेक्स्ट बनाने के लिए है। अंत में मुझे समझ में आ गया कि, तीर आइकन appcompat संसाधन फ़ाइलों में होगा, लेकिन हैमबर्गर आइकन संसाधनों में मौजूद नहीं है। अगर यह मौजूद है तो हम इसे रनटाइम में बदल सकते हैं

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

होम बटन को बदलने के लिए, मैंने @anandsingh उत्तर का अनुसरण किया।


2
यह एक बहुत आसान है और रास्ता बनाए रखने के लिए कठिन है .. मैं कहूंगा कि इस का पालन करने की तुलना में कुछ भी नहीं करना बेहतर होगा। हालांकि यह एक डेमो के लिए काम करने वाले नमूने को प्राप्त करने में मदद कर सकता है।
ओलिविएरम

@ तरुण बेचारा - यह वही हो सकता है जिसकी मुझे तलाश है ... मैं कोड का उपयोग करके इसे बदलने का एक तरीका ढूंढ रहा हूं ... मैं अगले कुछ दिनों के भीतर इस पर गौर करूंगा ... अग्रिम धन्यवाद! ' । हालांकि मैं हैमबर्गर मेनू आइकन की तलाश कर रहा हूं ... लेकिन यह मुझे सही दिशा में इंगित कर सकता है।
डारोन

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

यदि आप केवल अपने नेविगेशन ड्रॉअर आइकन में रंग बदलना चाहते हैं, तो यह प्रयास करें:

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

सीधे अपनी गतिविधि में वापस लें


-1

हैमबर्गर आइकन आपके एक्शन ActionBarDrawerToggleक्लास द्वारा नियंत्रित किया जाता है । यदि आप android कंपोजिट लाइब्रेरियों का उपयोग कर रहे हैं जो कि अभी के लिए जरूरी है। आप इस तरह से रंग बदल सकते हैं:

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

आपके द्वारा पोस्ट किया गया यह कोड क्रैश हो जाएगा क्योंकि ड्राअरटॉगल का कोई संदर्भ नहीं है .... हमें एक संदर्भ कैसे मिलेगा?
डारोन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.