B4A控件的背景色属性有两个:Color和Background,B4XView类型控件无论在B4A还是B4J,都只有Color属性。B4J其它控件没有背景色属性,要获取和设置其背景色属性,需使用As(B4XView)方法。
一、Color属性
Color属性的值类型是 Int 型。
对于B4A的非B4XView类型控件:用于设置控件的背景颜色(只写)。因为是只写属性,要想获取控件背景色需使用这样的语句:Dim Color1 As Int=Label1.As(B4XView).Color。
对于B4A、B4J的B4XView类型控件:用于设置或返回控件的背景颜色(读写)。其获取控件背景色的语句:Dim Color1 As Int=Label1.Color。
设置控件的背景色有以下几种方法:
1、使用B4A的Colors对象设置:
适用于B4A的非B4XView类型控件。B4A的Colors对象提供了Black、Blue、Transparent等12种常用色以及ARGB和RGB函数,ARGB比RGB多了一个参数Alpha(不透明度),取值范围为0-255,其中0是完全透明,255是完全不透明。 语法为:
Colors.ARGB(Alpha As Int,R As Int,G As Int,B As Int)。
可以类似下列语句设置控件的背景色属性:
Label1.Color=Colors.Green
Label1.Color=Colors.ARGB(20,125,125,255)
Label1.Color=Colors.RGB(125,125,255)
2、使用XUI对象设置:
适用于所有具有Color属性的控件。XUI对象是跨平台的,在B4A和B4J中使用方法相同。它提供了和B4A的Colors对象相同的常用色及ARGB和RGB函数,ARGB函数语法为:xui.Color_ARGB(Alpha As Int,R As Int,G As Int,B As Int)。
可以类似下列语句设置控件的背景色属性:
Label1.Color=xui.Color_Green
Label1.Color=xui.Color_ARGB(20,255,122,122)
Label1.Color=xui.Color_RGB(125,125,255)
3、使用JFX对象设置:
适用于B4J的B4XView类型控件。B4J的JFX也提供了Colors对象,和B4A的Colors对象有一样的常用色及ARGB和RGB函数,但其返回的值是 Paint类型,需要将该返回值转换为Int类型才能使用,例如:
Label1.Color=xui.PaintOrColorToColor(fx.Colors.Green)
4、使用十六进制整数颜色值设置:
适用于所有具有Color属性的控件。B4X中用十六进制整数设置颜色,需要在数值前加0x前缀。例如:
Label1.Color=0XFFDCDCDC
5、使用值传递设置:
适用于所有具有Color属性的控件。例如:
Label2.Color=Label1.Color
备注:
在B4J中,Color属性返回的是有符号十进制整数,虽然使用该值也能正确设置控件背景色,但不常用,我们一般还是用十六进制整数来设置(方便查找相应颜色的对应数值)。
对于没有Color属性的控件可使用As转换,例如:
Dim Color1 As Int=Label1.As(B4XView).Color
Button1.As(B4XView).Color=xui.Color_Green。
二、Background属性
Background属性是GradientDrawable类型(Android的可定制渐变形状类型),仅B4A的非B4XView类型控件具有此属性。该属性用于设置或返回控件的背景渐变形状。
设置背景渐变形状的语法:
控件.Initialize(渐变方向,颜色值数组)
渐变方向有:LEFT-RIGHT、RIGHT-LEFT、TOP-BOTTOM、BOTTOM-TOP、TR-BL(右顶-左底)、BL-TR(左底-右顶)、TL-BR(左顶-右底)、BR-TL(右底-左顶)8个选项。
颜色值数组必须大于等于2,也就是至少提供2个颜色值。
1、 获取控件的Background属性值示例:
Dim gd As GradientDrawable=Label1.Background
2、设置控件的Background属性值示例:
Dim gd As GradientDrawable
Dim ar(2) As Int
ar(0)=Colors.Blue
ar(1)=Colors.White
gd.Initialize("BOTTOM_TOP",ar)
Label1.Background=gd
或使用下面语句:
Dim gd As GradientDrawable
gd.Initialize("BOTTOM_TOP",Array as Int(Colors.Blue,Colors.White,Colors.Green))
Label1.Background=gd
备注:
1、每个不同尺寸大小的控件在给其Background赋值前,必须先将已定义的GradientDrawable型变量(如:gd)初始化一次。
如上例:如果再将gd变量给Button1的Background赋值,则需添加如下语句:
gd.Initialize("BOTTOM_TOP",ar)
Button1.Background=gd
2、不能用这样的语句:Button1.Background=Label1.Background
这样如果Button1尺寸比Label1大,Button1会渲染不全,只能渲染Label1大小的区域。