Leo*_*ale 7 android android-fragments android-actionbar android-actionbaractivity android-toolbar
我在活动中有两个片段.当片段A显示时,我希望显示导航抽屉汉堡图标并使导航抽屉工作.当片段B显示时,我想要显示后退箭头以及何时单击它进行向上导航.但是,除非导航抽屉打开,否则我似乎无法使用新的AppCompat v7工具栏在ActionBarActivity中显示向上箭头.
在我的活动中,对于我的onCreate()方法,我有......
toolbar = (Toolbar) findViewById(R.id.toolbar);
if (toolbar != null) {
setSupportActionBar(toolbar);
}
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close);
mDrawerLayout.setDrawerListener(mDrawerToggle);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
Run Code Online (Sandbox Code Playgroud)
然后我打电话给mDrawerToggle.syncState();我的onPostCreate()
我试过搜索如何以编程方式触发工具栏图标到后箭头,但没有任何工作.从我收集到的,呼唤
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
Run Code Online (Sandbox Code Playgroud)
从我的片段应该改变图标,但事实并非如此.这可能是一个愚蠢的问题,但我做错了什么?
Nik*_*ski 10
根据我在v7源代码中看到的内容ActionBarDrawerToggle,您可以将图标设置为不同的状态,而无需打开抽屉.
private enum ActionDrawableState{
BURGER, ARROW
}
private static void toggleActionBarIcon(ActionDrawableState state, final ActionBarDrawerToggle toggle, boolean animate){
if(animate) {
float start = state == ActionDrawableState.BURGER ? 0f : 1.0f;
float end = Math.abs(start - 1);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
ValueAnimator offsetAnimator = ValueAnimator.ofFloat(start, end);
offsetAnimator.setDuration(300);
offsetAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
offsetAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float offset = (Float) animation.getAnimatedValue();
toggle.onDrawerSlide(null, offset);
}
});
offsetAnimator.start();
}else{
//do the same with nine-old-androids lib :)
}
}else{
if(state == ActionDrawableState.BURGER){
toggle.onDrawerClosed(null);
}else{
toggle.onDrawerOpened(null);
}
}
}
Run Code Online (Sandbox Code Playgroud)
汉堡和箭之间变形取决于之间的值0f和1.0f,基本上这些值抽屉传递给ActionBarDrawerToggle.
我曾经ValueAnimator在这个范围内设置动画值,即模仿抽屉切换.
null参数是安全的,因为ActionBarDrawerToggle它根本不关心抽屉视图.确保您看一下新的插补器,完全按照材料设计指南进行动画制作:
fast_out_linear_in
fast_out_slow_in
Run Code Online (Sandbox Code Playgroud)
另一种方法是访问通过反射和调用方法的mSlider私有字段以在Burger和Arrow之间切换.
是类型(扩展).ActionBarDrawersetPosition(float position)mSliderDrawerArrowDrawable
就个人而言,我总是尽量避免反思,只要没有其他方法可以做你的肮脏工作.