android - नेविगेशन ड्रावर में चेक किए गए मेनू आइटम का रंग बदलें




androiddesignsupport (4)

इसे प्राप्त करने का दूसरा तरीका यहां दिया गया है:

public boolean onOptionsItemSelected(MenuItem item) {

    int id = item.getItemId();

    item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            item.setEnabled(true);
            item.setTitle(Html.fromHtml("<font color='#ff3824'>Settings</font>"));
            return false;
            }
        });


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

    return super.onOptionsItemSelected(item);
}

}

मैं अपने आवेदन में एक नेविगेशन दराज को लागू करने के लिए नए एंड्रॉइड डिज़ाइन सपोर्ट लाइब्रेरी का उपयोग कर रहा हूं।

मैं यह नहीं जान सकता कि किसी चयनित वस्तु का रंग कैसे बदला जाए!

यहाँ मेनू का xml है:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
    <item
        android:id="@+id/navigation_item_1"
        android:icon="@drawable/ic_1"
        android:title="@string/navigation_item_1"/>

    <item
        android:id="@+id/navigation_item_2"
        android:icon="@drawable/ic_2"
        android:title="@string/navigation_item_2"/>
</group>

और यहाँ नेविगेशनव्यू xml है जो कि android.support.v4.widget.DrawerLayout अंदर रखा गया है:

<android.support.design.widget.NavigationView
    android:id="@+id/activity_main_navigationview"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    app:headerLayout="@layout/drawer_header"
    app:itemIconTint="@color/black"
    app:itemTextColor="@color/primary_text"
    app:menu="@menu/menu_drawer">

    <TextView
        android:id="@+id/main_activity_version"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:layout_marginBottom="@dimen/activity_vertical_margin"
        android:layout_marginLeft="@dimen/activity_horizontal_margin"
        android:textColor="@color/primary_text" />

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

आपके सहयोग के लिए धन्यवाद !

[संपादित करें] मैंने पहले ही इस तरह के समाधानों पर ध्यान दिया है: एंड्रॉइड मेनू का पृष्ठभूमि रंग बदलें

यह काफी हैक लगता है और मुझे लगा कि नई डिज़ाइन सपोर्ट लाइब्रेरी के साथ, कुछ क्लीनर पेश किया गया होगा?


जब भी NavigateView में आइटम पर क्लिक किया जाता है, तो NavigateView है

//listen for navigation events
NavigationView navigationView = (NavigationView)findViewById(R.id.navigation);
navigationView.setNavigationItemSelectedListener(this);
// select the correct nav menu item
navigationView.getMenu().findItem(mNavItemId).setChecked(true);

NavigationItemSelectedListener पर देखें

  @Override
  public boolean onNavigationItemSelected(final MenuItem menuItem) {
    // update highlighted item in the navigation menu
    menuItem.setChecked(true);
    mNavItemId = menuItem.getItemId();

    // allow some time after closing the drawer before performing real navigation
    // so the user can see what is happening
    mDrawerLayout.closeDrawer(GravityCompat.START);
    mDrawerActionHandler.postDelayed(new Runnable() {
      @Override
      public void run() {
        navigate(menuItem.getItemId());
      }
    }, DRAWER_CLOSE_DELAY_MS);
    return true;
  }

यहां बताया गया है कि आप इसे अपनी गतिविधि के ऑनक्रिट विधि में कैसे कर सकते हैं:

NavigationView navigationView = findViewById(R.id.nav_view);
ColorStateList csl = new ColorStateList(
    new int[][] {
        new int[] {-android.R.attr.state_checked}, // unchecked
        new int[] { android.R.attr.state_checked}  // checked
    },
    new int[] {
        Color.BLACK,
        Color.RED
    }
);
navigationView.setItemTextColor(csl);
navigationView.setItemIconTintList(csl);

वैसे आप कलर स्टेट रिसोर्स का उपयोग करके इसे प्राप्त कर सकते हैं। यदि आप अपने NavigationView दृश्य के अंदर नोटिस करते हैं तो आप उपयोग कर रहे हैं

app:itemIconTint="@color/black"
app:itemTextColor="@color/primary_text"

यहां @color/black या @color/primary_test इस्तेमाल करने के बजाय Color State List Resource । उसके लिए, पहले color निर्देशिका के अंदर एक नया xml (जैसे drawer_item.xml) बनाएं (जो कि res निर्देशिका के अंदर होना चाहिए।) यदि आपके पास पहले से color नाम की कोई निर्देशिका नहीं है, तो एक बनाएँ।

अब drawer_item.xml अंदर ऐसा कुछ करें

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="checked state color" android:state_checked="true" />
    <item android:color="your default color" />
</selector>

अंतिम चरण आपके NavigationView को बदलना होगा

<android.support.design.widget.NavigationView
    android:id="@+id/activity_main_navigationview"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    app:headerLayout="@layout/drawer_header"
    app:itemIconTint="@color/drawer_item"  // notice here
    app:itemTextColor="@color/drawer_item" // and here
    app:itemBackground="@android:color/transparent"// and here for setting the background color to tranparent
    app:menu="@menu/menu_drawer">

इस तरह आप IconTint , ItemTextColor , ItemBackground लिए अलग रंग राज्य सूची संसाधनों का उपयोग कर सकते हैं।

अब जब आप किसी आइटम को चेक ( xml या प्रोग्रामिक रूप से) के रूप में सेट करते हैं, तो उस विशेष आइटम पर अनियंत्रित लोगों की तुलना में अलग रंग होगा।





androiddesignsupport