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
या प्रोग्रामिक रूप से) के रूप में सेट करते हैं, तो उस विशेष आइटम पर अनियंत्रित लोगों की तुलना में अलग रंग होगा।