如何设置视图的背景色

我试图设置一个视图的背景颜色(在这种情况下是一个按钮)。

我用这个代码:

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

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

谢谢。

498841 次浏览

以及正确的改变方式是什么 任何视图的背景颜色?

任何 View? 你有什么是正确的,虽然你应该放弃 invalidate()调用。

然而,一些 Views已经有了背景。例如,Button已经有了背景: 按钮本身的面。这个背景是 StateListDrawable,您可以在 Android SDK 安装中的 android-2.1/data/res/drawable/btn_default.xml中找到它。反过来,这指的是一组9个补丁的位图图像,有多种密度可供选择。您需要克隆和修改所有这些来实现您的绿色目标。

简而言之,您将更好地找到另一个 UI 模式,而不是试图更改 Button的背景。

这个 有个问题讲述了如何改变视图的背景颜色。在其中一个答案中,该人员解释了如何在运行时更改背景颜色。显然,您将研究如何修改屏幕上的其他对象,但是这应该会给您一个良好的开端,至少允许您在按钮单击时修改视图的背景颜色。

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

代码没有将按钮设置为绿色,而是使按钮完全不可见。

说明: 颜色的十六进制值是错误的。如果阿尔法值为零,颜色将是不可见的。

正确的十六进制值是 0xFF00FF00,表示完全不透明的绿色。任何介于00和 FF 之间的 Alpha 值都会导致透明。

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

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

使用 PorterDuff.Mode. * 尝试不同的效果。

按钮是透明的,第一个字节是 alpha。

试试 v.setBackgroundColor(0xFF00FF00);

做这件事的几个选择..。

将背景设置为绿色:

v.setBackgroundColor(0x00FF00);

使用 阿尔法将背景设置为绿色:

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));

您可以使用以下方法将十六进制颜色设置为任何资源:

View.setBackgroundColor(Color.parseColor("#e7eecc"));

为了设置屏幕上显示的第一个颜色,你也可以在相关的 layout.xml (更好的设计)中通过将这个属性添加到相关的 View:

android:background="#FF00FF00"

你可以简单地使用:

view.setBackgroundColor(Color.parseColor("#FFFFFF"));

试着加上:

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

我在 API 使用16分钟,目标23

Button WeekDoneButton = (Button) viewWeeklyTimetable.findViewById(R.id.week_done_button);


WeekDoneButton.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.colorAccent));

使用 Android6使用 ContextCompactStating

        view.setBackgroundColor( ContextCompat.getColor(this, R.color.your_color));
mButton.setBackgroundColor(getResources().getColor(R.color.myColor));

你可以简单地使用:

view.setBackgroundColor(Color.rgb(0, 198, 255));
view.setBackgroundColor(R.color.primaryColor);

添加颜色以前的颜色值,所以我有一个不同的颜色。

对我有用的是:

view.setBackgroundResource(R.color.primaryColor);

假设我们在 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);


....




}

必须在参数中传递 int

第一个例子:

view.setBackgroundColor(-500136)

第二个例子:

int colorId = R.color.green;


view.setBackgroundResource(colorId);

这个应该可以正常工作: v.setBackgroundColor(0xFF00FF00);

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)

我尝试了以上所有的方法。但是我还没有达到我想要的效果。这是我的尝试。 如果您使用六进制代码的颜色,并希望设置的颜色作为背景的图像,那么这是科特林代码。

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)

这对我有用

v.getBackground().setTint(Color.parseColor("#212121"));

这样只改变背景的颜色而不改变背景本身。这是非常有用的例如,如果你有一个圆角的背景。