繁体   English   中英

以编程方式更改按钮的色调

[英]change tint of button programmatically

我只是想从Java代码内部更改普通按钮的backgroundTint 我尝试了许多不同的方法,例如ColorStateList或setColorFilter,但没有任何效果。 我故意不使用setBackgroundColor因为我想保持按钮的原始形状。

此外,我要使用的颜色已经在我的资源中定义。 经过大量的试验和错误之后,我设法通过以下代码访问了这些颜色:

int colorBtnDeactivated = ContextCompat.getColor(this, R.color.colorBtnDeactivated);

因此,基本上我只需要这一行Java代码即可使我能够访问背景色。 其余的我自己做。

非常感谢您的帮助,我已经在这个问题上停留了几个小时。 谢谢!

编辑:使用选择器xlm不起作用,因为它仅在按下时更改了按钮的颜色。 而且按钮之间也会相互影响,因此通过按下一个按钮,我将需要能够更改另一个按钮的背景色。

编辑2:我再次尝试使用setColorFilter

//this is all inside the onCreate-method

int colorBtnActiveTest= ContextCompat.getColor(this, colorBtnActive);
int colorBtnDeactivatedTest=ContextCompat.getColor(this, colorBtnDeactivated);

Button btnKnockOne = (Button)findViewById(R.id.btnKnockOne);
boolean stateBtnKnockOne = false;
btnKnockOne.getBackground().setColorFilter(colorBtnDeactivatedTest, PorterDuff.Mode.SRC_IN);

btnKnockOne.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (stateBtnKnockOne==false){
                    btnKnockOne.getBackground().setColorFilter(colorBtnActiveTest, PorterDuff.Mode.SRC_IN);
                    stateBtnKnockOne=true;
                }

                else if (stateBtnKnockOne==true){
                    btnKnockOne.getBackground().setColorFilter(colorBtnDeactivatedTest, PorterDuff.Mode.SRC_IN);
                    stateBtnKnockOne=false;
                }
            }
        });

结果如下:

  • 当我打开活动时,按钮以默认的灰色按钮颜色显示,而不是以我的自定义颜色colorBtnDeactivatedTest
  • 当我按下按钮时,它会暂时将其颜色更改为colorBtnActiveTest ,然后又恢复为灰色

我终于找到了解决方案! 这篇文章帮助我找到了它: https : //stackoverflow.com/a/8748112/8952749

现在,我基本上有两个按钮,一次只能选择一个。 为此,我创建了一个选择器-xlm:

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:state_selected="true"
        android:drawable="@drawable/button_active" />
    <item
        android:state_selected="false"
        android:drawable="@drawable/button_deactivated" />

</selector>

这是Java代码,使我可以更改按钮的state_selected

    stateBtn1=false;
    stateBtn2=false;

    btnTest1=(Button)findViewById(R.id.button);
    btnTest2=(Button)findViewById(R.id.button2);

    btnTest1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (stateBtn1==false){
                btnTest1.setSelected(true);
                stateBtn1=true;

                btnTest2.setSelected(false);
                stateBtn2=false;
            }
            else if (stateBtn1==true){
                btnTest1.setSelected(false);
                stateBtn1=false;
            }
        }
    });

    btnTest2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (stateBtn2==false){
                btnTest2.setSelected(true);
                stateBtn2=true;

                btnTest1.setSelected(false);
                stateBtn1=false;
            }
            else if (stateBtn2==true){
                btnTest2.setSelected(false);
                stateBtn2=false;
            }
        }
    });

如何以编程方式更改 android 的值: tint 属性<bitmap xml< div><div id="text_translate"><p> 我是新来的,我需要你的帮助。 请告诉我如何从程序级别访问层列表 xml 结构并从程序级别动态更改 bitmap 的“色调”颜色。</p><pre> &lt;layer-list xmlns:android="http://schemas.android.com/apk/res/android"&gt; &lt;item android:id="@+id/bg_peper" android:right="65dp"&gt; &lt;bitmap android:gravity="top|left" android:tint="@color/red" android:src="@drawable/ic_favorite" /&gt; &lt;/item&gt; &lt;item.... &lt;/layer-list&gt;</pre></div></bitmap>

[英]How to programmatically change the value of the android: tint property in <bitmap xml

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM