如何获取按钮的背景颜色

Posted

技术标签:

【中文标题】如何获取按钮的背景颜色【英文标题】:How to get Background color for a Button 【发布时间】:2016-08-12 04:49:51 【问题描述】:

我有一个 ImageButton,它的背景是一种颜色

 android:src="@color/c105"

如何以编程方式获得该颜色?

我想把它作为 Color 而不是 Drawable

【问题讨论】:

***.com/questions/5271387/… ? 【参考方案1】:
getResources().getColor(r.color.c105);

应该这样做

您可以通过在代码中引用它来设置图像按钮的颜色,如下所示:

(ImageView) findViewById(R.id.your_image_view).setBackgroundColor(getResources().getColor(R.color.c105);

【讨论】:

【参考方案2】:

如果您知道 View 的背景是一种颜色,则可以检索背景可绘制对象,将其转换为 ColorDrawable 并读取其颜色值:

int color = 0;
Drawable background = imageButton.getBackground();
if (background instanceof ColorDrawable) 
    color = ((ColorDrawable)background).getColor();

【讨论】:

如果不是ColorDrawable怎么办?如果我在 Android Studio 中添加一个按钮而不更改其默认颜色,imageButton.getBackground(); 将返回一个RippleDrawable 并且RippleDrawable 没有.getColor() 方法。但是,如果我手动选择按钮背景的颜色,那么同一行将返回 ColorDrawable。我该如何处理RippleDrawable 案子?【参考方案3】:

请使用这个:

private int getButtonBackgroundColor(Button button)
            int buttonColor = 0;

            if (button.getBackground() instanceof ColorDrawable) 
                ColorDrawable cd = (ColorDrawable) button.getBackground();
                buttonColor = cd.getColor();
            

            if (button.getBackground() instanceof RippleDrawable) 
                RippleDrawable rippleDrawable = (RippleDrawable) button.getBackground();
                Drawable.ConstantState state = rippleDrawable.getConstantState();
                try 
                    Field colorField = state.getClass().getDeclaredField("mColor");
                    colorField.setAccessible(true);
                    ColorStateList colorStateList = (ColorStateList) colorField.get(state);
                    buttonColor = colorStateList.getDefaultColor();
                 catch (NoSuchFieldException e) 
                    e.printStackTrace();
                 catch (IllegalAccessException e) 
                    e.printStackTrace();
                
            
            return buttonColor;
        

【讨论】:

以上是关于如何获取按钮的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何在android上获取按钮的背景颜色?

如何从 SecondView 中获取选定的背景颜色以传递给 FirstView?

当背景设置为可绘制时如何从按钮获取颜色

如何在 PyQt 中获取按钮或标签(QPushButton、QLabel)的背景颜色

尝试获取按钮的背景颜色时出现 java.lang.ClassCastException

android createBitmap,如何设置背景色