Я меняю фон ActionBar в фрагменте с помощью ScrollView. У меня есть прослушиватель ScrollView, который изменяет альфу элементов в слоистом списке на основе расстояния прокрутки. Панель действий действительно отлично работает. Тем не менее, на фоне ящика навигации влияет это альфа-изменение, и я понятия не имею, почему; фон навигационного ящика становится невидимым. Я могу воспроизвести это легко на Nexus 7 под управлением Android L, но это не всегда происходит для некоторых 4.4 устройств.Изменение фона ActionBar влияет на навигационный ящик
Основная часть:
ActionBar actionBar = activity.getSupportActionBar();
LayerDrawable mActionBarBg = (LayerDrawable) getResources().getDrawable(R.drawable.background_actionbar);
if (mActionBarBg != null) {
setActionBarBgAlpha(0);
actionBar.setBackgroundDrawable(mActionBarBg);
}
Альфа калькулятор заключается в следующем:
scrollView.setOnScrollChangedLitstener(new OnScrollChangedListener() {
@Override
public void onScrollChanged(int l, int t, int oldl, int oldt) {
t = Math.max(t, 0);
endpointHeader.setTranslationY(endpointHeader.getTop() + (t * 0.25f));
mScrollAlpha = (int) Math.min(alphaToHeightRatio * t, 255);
updateActionBarElemsAlpha(mScrollAlpha);
}
});
Пара других методов:
private void updateActionBarElemsAlpha(int updatedAlpha){
if(mActionBarTitleColor != null){
mActionBarTitleColor.setAlpha(updatedAlpha);
mActionBarTitleView.setTextColor(mActionBarTitleColor.getColor());
}
setActionBarBgAlpha(updatedAlpha);
}
private void setActionBarBgAlpha(int alpha){
if(mActionBarBg != null){
mActionBarBg.getDrawable(1).setAlpha(alpha);
mActionBarBg.getDrawable(2).setAlpha(alpha);
}
}
background_actionbar.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@drawable/gradient" />
<item android:drawable="@color/grey_divider"/>
<item android:bottom="2dp"
android:drawable="@color/White"/>
</layer-list>
работает как очарование! – ono