Aynı sorunu yaşadım ve çözmek için bir adım daha ileri gittim. Ancak tek sorun, NavStateListDrawable'ı xml'de belirtememenizdir, bu nedenle UI öğenizin arka planını kod aracılığıyla ayarlamanız gerekir. OnStateChange yöntemi daha sonra, ana çekilebilir seviyenin her değiştiğinde, alt seviye listesinin seviyesini de güncellemenizi sağlamak için geçersiz kılınmalıdır.
NavStateListDrawable'ı oluştururken, görüntülemek istediğiniz simge düzeyini geçmeniz gerekir.
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;
}
}
Tüm farklı gezinme düğmesinin çekilebilir durumları için aşağıdaki gibi bir şeyim var.
<?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>
Bunu bir soru cevap olarak gönderecektim, ama soruyu sorduğunuza göre, işte buyrun. Unutmayın, bu size çok fazla xml dosya tanımından tasarruf sağlar. 50-100 xml tanımından yaklaşık 4'e düştüm !.