android - 在运行时以编程方式更改汉堡包/返回图标颜色

时间:2014-11-18 16:50:57

标签: android android-5.0-lollipop android-toolbar

我正在尝试更改我的app programmaticaly的样式属性“colorControlNormal”并在运行时,但我没有任何结果。

此属性是将汉堡包和色调搭配的颜色。返回新工具栏viewGroup的图标。此外,我正在使用v7兼容性库。

我听说我们无法在运行时更改应用主题,但我正在寻找答案,即使它不是那么干净。

非常感谢你!

编辑:

我认为gmail正在做我想要的,当你点击搜索图标时,白色汉堡包图标会变成灰色。

等待更多......

1 个答案:

答案 0 :(得分:0)

我花了一天时间,玩了不同的实现。所以我认为,最好的办法就是从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);

你还需要在你的片段中等待动画无法完成,但还有另外一个问题。

如果您有任何问题,请在评论中提出。