最近在做項目中遇到一個滑動需要改變狀態(tài)欄的back圖標
如果只是必全局那就簡單了

GIF.gif
<!--<item name="android:homeAsUpIndicator">@drawable/bt_title_back_selector</item>-->
直接在Application引用的Style里加一句這個就可以了
可需求又不能改全部的,并且項目中用到的是 android.support.v7.widget.Toolbar在調一單個Activity布局也不行。設置樣式也行不通。
后面就直接在代碼里設置了
toolbar.setNavigationIcon(R.drawable.bt_title_back_selector);
然后就是監(jiān)聽滑動改變back icon了
public abstract class AppBarStateChangeListener implements AppBarLayout.OnOffsetChangedListener {
public enum State {
EXPANDED,
COLLAPSED,
IDLE
}
private State mCurrentState = State.IDLE;
@Override
public final void onOffsetChanged(AppBarLayout appBarLayout, int i) {
if (i == 0) {
if (mCurrentState != State.EXPANDED) {
onStateChanged(appBarLayout, State.EXPANDED);
}
mCurrentState = State.EXPANDED;
} else if (Math.abs(i) >= appBarLayout.getTotalScrollRange()) {
if (mCurrentState != State.COLLAPSED) {
onStateChanged(appBarLayout, State.COLLAPSED);
}
mCurrentState = State.COLLAPSED;
} else {
if (mCurrentState != State.IDLE) {
onStateChanged(appBarLayout, State.IDLE);
}
mCurrentState = State.IDLE;
}
}
public abstract void onStateChanged(AppBarLayout appBarLayout, State state);
}
上面代碼直接復制使用,也是從別處拷過來的,驗證可以使用
appBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() {
@Override
public void onStateChanged(AppBarLayout appBarLayout, State state) {
if( state == State.EXPANDED ) {
//展開狀態(tài)
toolbar.setNavigationIcon(R.drawable.bt_title_back_selector);
}else if(state == State.COLLAPSED){
//折疊狀態(tài)
toolbar.setNavigationIcon(android.support.v7.appcompat.R.drawable.abc_ic_ab_back_material);
}else {
//中間狀態(tài)
toolbar.setNavigationIcon(android.support.v7.appcompat.R.drawable.abc_ic_ab_back_material);
}
}
});
然后就是對android.support.design.widget.AppBarLayout這個控件設置監(jiān)聽了
因為android.support.design.widget.CollapsingToolbarLayout外層是 android.support.design.widget.AppBarLayout所以設置的監(jiān)聽是它了。然后在相應的監(jiān)聽里你可以為所欲為了。
上面代碼只是記錄,防以后工作中會使用到。