Android:编程自定义按钮背景颜色,同时适合内部按钮

Posted

技术标签:

【中文标题】Android:编程自定义按钮背景颜色,同时适合内部按钮【英文标题】:Android: Programming custom made button background color, while fitting inside button 【发布时间】:2017-08-14 08:55:14 【问题描述】:

我试图在切换时将按钮的背景颜色更改为某种颜色,在未切换时更改为某种颜色,但是当我这样做时,颜色会改变按钮的形状。 这是我的代码:

    public void onClick(View v)
    if(index < 9)
        GameEngine.getInstance().setNumber(number);
    else if(index == 9)
        GameEngine.getInstance().setNumber(number);
    else if (index == 12) 
        GameEngine.getInstance().draftModeSetter();
        v.setBackgroundColor(Color.parseColor("#ffb6c1"));
    

这是结果before color change 和结果after color change。您可以清楚地看到“草稿”按钮变得更大,更清晰。

【问题讨论】:

【参考方案1】:

如果背景颜色是使用

btn.getBackground().setColorFilter(Color.RED, PorterDuff.Mode.MULTIPLY);

可以使用以下方法重置:

btn.getBackground().clearColorFilter();

【讨论】:

这是最接近工作的,除了它只是在切换时使按钮变白,无论我输入什么颜色或 PorterDuff 模式。 您可以为调用 setColorFilter() 的同一对象调用 clearColorFilter()。该方法等价于 setColorFilter(null),可以说比后者更具可读性。 有没有办法将实际颜色按钮更改为我想要的颜色? setColorFilter() 方法只是在切换时将其设置为白色,我似乎无法更改它。 我想你的问题的答案在这里:***.com/questions/11681895/… 不完全是,因为这是一个类中的自定义按钮,它在 XML 中不是作为单个按钮,而是作为一组按钮。【参考方案2】:

我觉得你应该使用xml:shape,selector like:

shape.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
<corners android:radius="5dp" />
<solid android:color="@color/blue_400" />
<stroke
    android:
    android:color="@color/blue_400" />
</shape>

selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/shape_comm_bt_pressed" 
      android:state_pressed="true" />
<item android:drawable="@drawable/shape_comm_bt_normal" 
      android:state_pressed="false" />
</selector>

使用

 <Button
    ...
    android:background="@drawable/selector_common_bt"
    ...
 />

【讨论】:

以上是关于Android:编程自定义按钮背景颜色,同时适合内部按钮的主要内容,如果未能解决你的问题,请参考以下文章

改变Android按钮背景颜色的高效方法

Android-以编程方式获取列表视图(项目)的背景颜色

具有背景颜色的按钮的材质效果

Android自定义水平进度条控件

自定义iOS7导航栏背景,标题和返回按钮文字颜色

自定义iOS导航栏背景,标题和返回按钮文字颜色