如何设置视图的背景色


178

我正在尝试设置视图(在这种情况下为按钮)的背景颜色。

我使用以下代码:

// set the background to green
v.setBackgroundColor(0x0000FF00 );
v.invalidate();

这会使按钮从屏幕上消失。我在做什么错,在任何视图上更改背景颜色的正确方法是什么?

谢谢。


1
看起来很正确。实际上,我认为您不需要调用invalidate()。当您说按钮消失时,您是说这个字面意思还是意味着按钮上的文字或图像消失了?
RickNotFred'2

Answers:


280

您使按钮透明。第一个字节是字母。

尝试 v.setBackgroundColor(0xFF00FF00);


2
EddieB在下面的回答要好得多,因为这可以消除任何边界等,例如EditText的下划线
Molten Ice

@aroth是更好的Color.Green吗?如果我想使用argb进行彩色复刻?...您的答案已被弃用
2015年

2
@delive-再来一次吗? Color.GREEN弃用,并且包括阿尔法字节。它的价值是0xff00ff00正是因为同样的什么建议的答案,但它也有被利益人类可读。大多数开发人员更喜欢人类可读的解决方案。
aroth

144

调用setBackgoundColor时,它将覆盖/删除任何现有的背景资源,包括任何边框,角,填充等。您要做的是更改现有背景资源的颜色...

View v;
v.getBackground().setColorFilter(Color.parseColor("#00ff00"), PorterDuff.Mode.DARKEN);

试用PorterDuff.Mode。*可获得不同的效果。


“不会覆盖/删除任何现有的后台资源”。
Yousha Aleayoub

2
我不得不将上述内容与v.invalidate()一起使用;在下一行。
Hashim Akhtar

1
尝试浪费时间并接受了可接受的答案,v.getBackground()给出了nullpointer异常并崩溃了。
Siddarth G

这个加上PorterDuff.Mode.SRC_IN为我解决了,所以我不会失去背景边框。
Guilherme Carvalho

123

几种选择可以做到这一点...

将背景设置为绿色:

v.setBackgroundColor(0x00FF00);

使用Alpha将背景设置为绿色:

v.setBackgroundColor(0xFF00FF00);

使用Color.GREEN常量将背景设置为绿色:

v.setBackgroundColor(Color.GREEN);

Colors.xml中将背景设置为绿色定义

<?xml version="1.0" encoding="utf-8"?>
<resources>     
    <color name="myGreen">#00FF00</color> 
    <color name="myGreenWithAlpha">#FF00FF00</color> 
</resources>

并使用:

v.setBackgroundResource(R.color.myGreen);

和:

v.setBackgroundResource(R.color.myGreenWithAlpha);

或较长的缠绕:

v.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.myGreen));

和:

v.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.myGreenWithAlpha));

getResources().getColor(...)有过时stackoverflow.com/questions/31842983/...
少年Mayhé

5
还有:v.setBackgroundResource(R.color.myGreen);使用时colors.xml
严峻的

删除了invalidate调用,您可以看到 setBackground...方法已经调用了该调用。
weston

v.setBackgroundColor(0x00FF00);只是他们说的代码不起作用。我也希望它是透明的。
weston


16
// set the background to green
v.setBackgroundColor(0x0000FF00 );
v.invalidate();

该代码未将按钮设置为绿色。相反,它使按钮完全不可见。

说明:颜色的十六进制值错误。如果Alpha值为零,则颜色将不可见。

正确的十六进制值适用0xFF00FF00于完全不透明的绿色。00和FF之间的任何Alpha值都将导致透明度。


12

以及在任何视图上更改背景颜色的正确方法是什么?

任何 View?您所拥有的是正确的,尽管您应该挂断invalidate()电话。

但是,有些Views已经有背景。Button例如,A 已经具有背景:按钮本身的表面。此背景是StateListDrawable,您可以在中找到android-2.1/data/res/drawable/btn_default.xml在Android SDK安装中。这又是指一堆9补丁位图图像,可以以多种密度使用。您需要克隆并修改所有这些内容才能实现您的绿色目标。

简而言之,您最好能找到另一个UI模式,而不是尝试更改a的背景Button


好的,谢谢您对Button背景的解释。九个补丁位图(developer.android.com/reference/android/graphics/NinePatch.html)对我来说是新的。我只是想在按下按钮时更改屏幕上任何内容的颜色。按钮位于TextView上。尝试更改其颜色,导致控制台消息“ DDM调度注册表等待超时... ActivityManager:无法调度DDM块52454151:未定义处理程序”,并在屏幕上显示对话框“应用程序意外停止”。猜猜我需要在UI上做更多的阅读。任何提示欢迎。谢谢。
彼得vdL,2010年

11

为了设置要在屏幕上看到的第一种颜色,您还可以通过将以下属性添加到相关的View中,在相关的layout.xml(更好的设计)中进行操作:

android:background="#FF00FF00"

这个问题表明,颜色变化必须是动态的。
彼得vdL,

11

尝试添加:

setBackgroundColor(Color.parseColor("#FF0000"));




4

问题讨论有关更改视图背景颜色的问题。在其中一个答案中,该人员说明了如何在运行时更改背景颜色。显然,您将研究如何修改屏幕上的其他对象,但这至少可以允许您在单击按钮时修改视图的背景色,从而为您提供一个良好的开端。




2

kotlin中,您可以这样操作:

val backgroundColor = R.color.whatever_color_you_like
view.setBackgroundColor(getColorCompat(backgroundColor))

getColorCompat()扩展功能在哪里:

/**
 * Extension method to provide simpler access to {@link ContextCompat#getColor(int)}.
 */

 fun Context.getColorCompat(color: Int) = ContextCompat.getColor(this, color)

1
view.setBackgroundColor(R.color.primaryColor);

将颜色添加到以前的颜色值,所以我有不同的颜色。

对我有用的是:

view.setBackgroundResource(R.color.primaryColor);

1

让我们假设我们有一个原色values=>colors.xml为:

<resources>
    <color name="primary">#FDD835</color>
</resources>

因此,如果我们要使用自定义颜色,setBackgroundColor(@ColorInt int Color)则只需要@SuppressLint("ResourceAsColor")带有构造函数/方法的注释即可,该注释将用作:

    @SuppressLint("ResourceAsColor")
    public _LinearLayout(Context context) {
        super(context);

        // Formatting our layout : )
        super.setBackgroundColor(R.color.primary);

        ....


    }

0

您必须int在参数中传递。

第一个例子:

view.setBackgroundColor(-500136)

第二个例子:

int colorId = R.color.green;

view.setBackgroundResource(colorId);


0

我尝试了上述所有方式。但是我还没有达到我所需要的。这是我的尝试。如果您使用十六进制代码作为颜色,并且想要将颜色设置为图像的背景,则这是kotlin代码。

val bitmap = Bitmap.createBitmap(30, 30, Bitmap.Config.ARGB_8888)
val canvas = Canvas(bitmap)
val colorCode = "#ffffff"
canvas.drawColor(Color.parseColor(colorCode))
mImageViewLogo.setImageBitmap(bitmap)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.