আমারও একই সমস্যা ছিল এবং এটি সমাধানের জন্য আরও একধাপ এগিয়ে গেলাম। তবে কেবলমাত্র সমস্যাটি হল আপনি xML এ 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;
}
}
বিভিন্ন নেভিগেশন বোতামের অঙ্কনযোগ্য রাষ্ট্রগুলির জন্য আমার নীচের মতো কিছু রয়েছে something
<?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>
আমি এটি একটি প্রশ্ন এবং উত্তর হিসাবে পোস্ট করতে যাচ্ছিল, কিন্তু আপনি খুব প্রশ্ন জিজ্ঞাসা করা হিসাবে দেখে, আপনি এখানে যান। দ্রষ্টব্য, এটি আপনাকে প্রচুর পরিমাণে এক্সএমএল ফাইল সংজ্ঞায় বাঁচিয়ে রেখেছে। আমি প্রায় 50-100 এক্সএমএল সংজ্ঞা থেকে প্রায় 4 এ নেমে গেলাম !.