Android的 - 运行时更改汉堡/后退图标颜色programaticaly(android -

2019-10-21 07:14发布

我试图改变风格属性我的应用程序programmaticaly和运行期间“colorControlNormal”,但我没有任何结果。

此属性是将着色的新工具栏的ViewGroup的汉堡包和背面图标的颜色。 除此之外,我使用的是V7兼容库。

我听说,在运行时,我们不能改变应用程序的主题,但我在寻找一个答案,即使它不那么干净的方式。

非常感谢 !

编辑:

我想通探微,Gmail的是做我想要什么,当你点击搜索图标,白色汉堡包图标变成灰色的了。

等待更多...

Answer 1:

我花了一天,有不同的实现播放。 所以我认为,最好的办法待办事项,它从程序兼容性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);

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

如果您有任何疑问,请在注释中。



文章来源: android - Change Hamburger/Back icons color programaticaly during runtime