मुझे भी यही समस्या थी और इसे सुलझाने के लिए एक कदम और आगे बढ़ा। केवल समस्या यह है कि आप XSt में NavStateListDrawable को निर्दिष्ट नहीं कर सकते हैं, इसलिए आपको कोड के माध्यम से अपने UI तत्व की पृष्ठभूमि सेट करनी होगी। OnStateChange विधि को तब यह सुनिश्चित करने के लिए ओवरराइड किया जाना चाहिए कि हर बार मुख्य ड्रॉबल का स्तर बदल जाता है, कि आप बच्चे के स्तर की सूची के स्तर को भी अपडेट करते हैं।
NavStateListDrawable का निर्माण करते समय आपको उस आइकन के स्तर से गुजरना होगा जिसे आप प्रदर्शित करना चाहते हैं।
public class NavStateListDrawable extends StateListDrawable {
private int level;
public NavStateListDrawable(Context context, int level) {
this.level = level;
//int stateChecked = android.R.attr.state_checked;
int stateFocused = android.R.attr.state_focused;
int statePressed = android.R.attr.state_pressed;
int stateSelected = android.R.attr.state_selected;
addState(new int[]{ stateSelected }, context.getResources().getDrawable(R.drawable.nav_btn_pressed));
addState(new int[]{ statePressed }, context.getResources().getDrawable(R.drawable.nav_btn_selected));
addState(new int[]{ stateFocused }, context.getResources().getDrawable(R.drawable.nav_btn_focused));
addState(new int[]{-stateFocused, -statePressed, -stateSelected}, context.getResources().getDrawable(R.drawable.nav_btn_default));
}
@Override
protected boolean onStateChange(int[] stateSet) {
boolean nowstate = super.onStateChange(stateSet);
try{
LayerDrawable defaultDrawable = (LayerDrawable)this.getCurrent();
LevelListDrawable bar2 = (LevelListDrawable)defaultDrawable.findDrawableByLayerId(R.id.nav_icons);
bar2.setLevel(level);
}catch(Exception exception)
{
}
return nowstate;
}
}
विभिन्न नेविगेशन बटन ड्रॉबल स्टेट्स के सभी के लिए मेरे पास कुछ इस तरह है।
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/top_bar_default" >
</item>
<item android:id="@+id/nav_icons" android:bottom="0dip">
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:maxLevel="0" >
<bitmap
android:src="@drawable/top_bar_icon_back"
android:gravity="center" />
</item>
<item android:maxLevel="1" >
<bitmap
android:src="@drawable/top_bar_icon_nav"
android:gravity="center" />
</item>
<item android:maxLevel="2" >
<bitmap
android:src="@drawable/top_bar_icon_settings"
android:gravity="center" />
</item>
<item android:maxLevel="3" >
<bitmap
android:src="@drawable/top_bar_icon_search"
android:gravity="center" />
</item>
</level-list>
</item>
</layer-list>
मैं इसे एक प्रश्न और उत्तर के रूप में पोस्ट करने जा रहा था, लेकिन जैसा कि आपने बहुत प्रश्न पूछा है, यह देखते हुए कि आप यहां जाते हैं। ध्यान दें, यह आपको बहुत सारे xml फ़ाइल परिभाषाओं का एक नरक बचाता है। मैं नीचे के बारे में 50-100 xml परिभाषा के बारे में 4 से नीचे चला गया!।