我正在尝试设置视图的背景颜色(在本例中为Button)。
我用这个代码:
// set the background to green
v.setBackgroundColor(0x0000FF00 );
v.invalidate();
它会导致Button从屏幕上消失。我做错了什么,以及在任何视图上更改背景颜色的正确方法是什么?
谢谢。
你使你的按钮透明。第一个字节是alpha。
试试v.setBackgroundColor(0xFF00FF00);
你可以简单地使用:
view.setBackgroundColor(Color.parseColor("#FFFFFF"));
这个question谈论改变视图的背景颜色。在其中一个答案中,该人员解释了如何在运行时更改背景颜色。显然,您将研究如何修改屏幕上的其他对象,但这应该给您一个良好的开端,至少允许您在按钮单击时修改视图的背景颜色。
mButton.setBackgroundColor(getResources().getColor(R.color.myColor));
从Android 6开始使用ContextCompat
view.setBackgroundColor( ContextCompat.getColor(this, R.color.your_color));
你可以简单地使用:
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);
....
}
当你调用setBackgoundColor时,它会覆盖/删除任何现有的背景资源,包括任何边框,角落,填充等。你要做的是改变现有背景资源的颜色......
View v;
v.getBackground().setColorFilter(Color.parseColor("#00ff00"), PorterDuff.Mode.DARKEN);
尝试使用PorterDuff.Mode。*来获得不同的效果。
有几种选择......
将背景设置为绿色:
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));
您可以使用以下命令将hex-color设置为任何资源:
View.setBackgroundColor(Color.parseColor("#e7eecc"));
// set the background to green
v.setBackgroundColor(0x0000FF00 );
v.invalidate();
代码不会将按钮设置为绿色。相反,它使按钮完全不可见。
说明:颜色的十六进制值错误。 Alpha值为零时,颜色将不可见。
对于完全不透明绿色,正确的十六进制值是0xFF00FF00
。 00和FF之间的任何Alpha值都会导致透明度。
什么是更改任何视图背景颜色的正确方法?
在任何View
?你有什么是正确的,虽然你应该放弃invalidate()
电话。
然而,一些Views
已经有背景。例如,Button
已经有了背景:按钮本身的面孔。此背景是StateListDrawable
,您可以在Android SDK安装中的android-2.1/data/res/drawable/btn_default.xml
中找到它。反过来,这是指一堆九个补丁位图图像,有多种密度可供选择。您需要克隆并修改所有这些以实现您的绿色目标。
简而言之,您将更好地找到另一个UI模式而不是尝试更改Button
的背景。
要设置要在屏幕上看到的第一种颜色,您还可以通过将此属性添加到相关视图,在相关的layout.xml(更好的设计)中执行此操作:
android:background="#FF00FF00"
尝试添加:
setBackgroundColor(Color.parseColor("#FF0000"));
我在API min 16,目标23使用
Button WeekDoneButton = (Button) viewWeeklyTimetable.findViewById(R.id.week_done_button);
WeekDoneButton.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.colorAccent));