我正在尝试以编程方式和运行时更改应用程序的样式属性"colorControlNormal",但我没有任何结果。
此属性是将为新工具栏视图组的汉堡包和背部图标着色的颜色。此外,我正在使用 v7 兼容性库。
我听说我们不能在运行时更改应用程序主题,但我正在寻找答案,即使它不是那么干净的方式。
编辑:
我只是认为gmail正在做我想做的事情,当您单击搜索图标时,白色汉堡包图标会变成灰色。
等待更多。
我花了一天时间,玩不同的实现。所以我的意见,最好的方法是从 AppCompat v7 库中复制粘贴 DrawerArrowDrawable。
https://gist.github.com/IstiN/5d542355935fd7f0f357 - 查看代码并进行一些优化
比您可以使用下面的代码在主要活动中使用它
DrawerArrowDrawable drawable = new DrawerArrowDrawable(this, this);
ImageView menuButton = (ImageView) findViewById(R.id.arrow);
menuButton.setImageDrawable(drawable);
menuButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((DrawerLayout)findViewById(R.id.drawer)).openDrawer(Gravity.START);
}
});
当您开始新片段时,您需要在同一位置再创建一个视图,并向您的片段添加第二个代码
private DrawerArrowDrawable mArrowDrawable;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mArrowDrawable = new DrawerArrowDrawable(getActivity(), getActivity());
ImageView topButton = (ImageView) view.findViewById(R.id.arrow);
topButton.setImageDrawable(mArrowDrawable);
topButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
closeSearch();
}
});
//run animation from hamburger to arrow
animate(0, 1, null);
....
private void animate(int startValue, int endvalue, Animator.AnimatorListener listener) {
ValueAnimator anim = ValueAnimator.ofFloat(startValue, endvalue);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
float slideOffset = (Float) valueAnimator.getAnimatedValue();
mArrowDrawable.setProgress(slideOffset);
}
});
anim.setInterpolator(new DecelerateInterpolator());
anim.setDuration(300);
if (listener != null) {
anim.addListener(listener);
}
anim.start();
}
制作从箭头到汉堡包手柄后退按钮的动画并执行代码
animate(1, 0, null);
您还需要在动画无法完成时等待片段,但这是另一个问题。
如果您有任何问题,请在评论中提问。