最近在做項目中遇到一個滑動需要改變狀態(tài)欄的back圖標
如果只是必全局那就簡單了
<!--<item name="android:homeAsUpIndicator">@drawable/bt_title_back_selector</item>-->
直接在Application引用的Style里加一句這個就可以了
可需求又不能改全部的坡脐,并且項目中用到的是 android.support.v7.widget.Toolbar
在調(diào)一單個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)聽里你可以為所欲為了龄减。
上面代碼只是記錄,防以后工作中會使用到华望。