如何设置视图的背景颜色

Pet*_*vdL 171 android background view colors set

我正在尝试设置视图的背景颜色(在本例中为Button).

我用这个代码:

// set the background to green
v.setBackgroundColor(0x0000FF00 );
v.invalidate();
Run Code Online (Sandbox Code Playgroud)

它会导致Button从屏幕上消失.我做错了什么,以及在任何视图上更改背景颜色的正确方法是什么?

谢谢.

小智 277

你使你的按钮透明.第一个字节是alpha.

尝试 v.setBackgroundColor(0xFF00FF00);

  • 下面 EddieB 的回答要好得多,因为这会删除任何边框等,例如 EditText 的下划线 (2认同)
  • @delive - 再来一次?[Color.GREEN](http://developer.android.com/reference/android/graphics/Color.html#GREEN)未被弃用,并包含alpha字节.它的值是`0xff00ff00`,_exactly_与答案中建议的相同,除了它还有_human-readable_的好处.大多数开发人员更喜欢人类可读的解决方案. (2认同)

Edd*_*ieB 142

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

View v;
v.getBackground().setColorFilter(Color.parseColor("#00ff00"), PorterDuff.Mode.DARKEN);
Run Code Online (Sandbox Code Playgroud)

尝试使用PorterDuff.Mode.*来获得不同的效果.

  • 我必须使用上面的v.invalidate(); 在下一行. (2认同)
  • 尝试了这个浪费时间并接受了接受的答案,v.getBackground()给出了空指针异常并崩溃了。 (2认同)

Jor*_*sys 117

有几种选择......

将背景设置为绿色:

v.setBackgroundColor(0x00FF00);
Run Code Online (Sandbox Code Playgroud)

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

v.setBackgroundColor(0xFF00FF00);
Run Code Online (Sandbox Code Playgroud)

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

v.setBackgroundColor(Color.GREEN);
Run Code Online (Sandbox Code Playgroud)

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

<?xml version="1.0" encoding="utf-8"?>
<resources>     
    <color name="myGreen">#00FF00</color> 
    <color name="myGreenWithAlpha">#FF00FF00</color> 
</resources>
Run Code Online (Sandbox Code Playgroud)

和使用:

v.setBackgroundResource(R.color.myGreen);
Run Code Online (Sandbox Code Playgroud)

和:

v.setBackgroundResource(R.color.myGreenWithAlpha);
Run Code Online (Sandbox Code Playgroud)

或者更长的啰嗦:

v.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.myGreen));
Run Code Online (Sandbox Code Playgroud)

和:

v.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.myGreenWithAlpha));
Run Code Online (Sandbox Code Playgroud)

  • 还有:`v.setBackgroundResource(R.color.myGreen);`当使用`colors.xml`时 (5认同)
  • 对我而言没有阿尔法 (2认同)

小智 35

您可以使用以下命令将hex-color设置为任何资源:

View.setBackgroundColor(Color.parseColor("#e7eecc"));
Run Code Online (Sandbox Code Playgroud)


小智 16

// set the background to green
v.setBackgroundColor(0x0000FF00 );
v.invalidate();
Run Code Online (Sandbox Code Playgroud)

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

说明:颜色的十六进制值错误.Alpha值为零时,颜色将不可见.

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


Com*_*are 12

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

任何 View?你有什么是正确的,虽然你应该放弃invalidate()电话.

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

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


小智 11

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

android:background="#FF00FF00"
Run Code Online (Sandbox Code Playgroud)


Lon*_*bow 11

尝试添加:

setBackgroundColor(Color.parseColor("#FF0000"));
Run Code Online (Sandbox Code Playgroud)


小智 7

这对我有用

v.getBackground().setTint(Color.parseColor("#212121"));
Run Code Online (Sandbox Code Playgroud)

这样只会改变背景的颜色,而不会改变背景本身。例如,如果您的背景带有圆角,这非常有用。


小智 6

我在API min 16,目标23使用

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

WeekDoneButton.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.colorAccent));
Run Code Online (Sandbox Code Playgroud)


Gia*_*nis 6

mButton.setBackgroundColor(getResources().getColor(R.color.myColor));
Run Code Online (Sandbox Code Playgroud)


dan*_*kas 5

你可以简单地使用:

view.setBackgroundColor(Color.parseColor("#FFFFFF"));
Run Code Online (Sandbox Code Playgroud)


Mah*_*ber 5

您可以简单地使用:

view.setBackgroundColor(Color.rgb(0, 198, 255));
Run Code Online (Sandbox Code Playgroud)