① android 中代码定义颜色的几种方式
Android开发中颜色的自定义方法
1、使用Color类的常量,如:
int color = Color.BLUE; // 创建一个蓝色 是使用Android提供的颜色 int color = Color.RED; int color = Color.WHITE; 2、通过ARGB构建,如:
int color = Color.argb ( 127, 255, 0, 255 ); // 半透明的紫色
其中第一个参数表示透明,0表示完全透明,255(ff)表示完全不透明;后三位分别代表RGB的值了。 3、使用XML资源文件来定义颜色
该方法扩展性好,便于修改和共享,如在values目录下创建一个color.xml: <?xml version=” 1.0” encoding=”utf -8”> <resources>
<color name=”mycolor”> #7fff00ff</color> </resources>
定义了一个名为mycolor的颜色,在别的地方就可以通过引用mycolor来获取该颜色值,如textView定义中:
android:textColor= "@drawable/mycolor"
java代码中可以使用ResourceManager类中的getColor来获取该颜色: int color = getResources().getColor(R.color.mycolor);
这与第二种方法得到的值是一样的,getResources()方法返回当前活动Activity的ResourceManager类实例。
说明:XML定义方法接受6位和8位两种表示法,而且开头必须是#,8位定义时前两位表示透明。 4、直接定义色值,如: int color = 0xff00ff00;
这种方法必须使用0x开头,而不是用我们常用的#。与方法3不一样,值也必须用8位表示 ,不接受6位的颜色表示。分组一下0x|ff|ff00ff,0x是代表颜色整数的标记,ff是表示透明度,ff00ff表示RGB颜色值。
=======================
补充一点Android布局中背景图片的设置(编辑LinearLayout):
* 可以使用纯色:android:background="@drawable/mycolor" (XML资源文件中定义的颜色)
* 也可使用图片:android:background="@drawable/bg" (需要将一个名为bg.jpg或png的图片拷贝到res/drawable-hdpi目录下)。
② 引用Android的资源文件,为什么在引用颜色资源时是:activity.getResource.getColor(),而引用字符串
activity继承自context,getString在context中有实现,其结果也是会掉到Resource中去,但是context类中没有实现getColor,所以得到Resource中去调,详细的接口去看看context和Resource两个累就明白了,主要Context的大部分接口都是在ContextImpl中实现的。
③ 在安卓(android)应用层上,不同的app如何共享主题(theme)、样式(styles)、颜色(color)等资源。
建议下载R.E管理器查看源代码(需要root权限),
④ android第三方库修改颜色
1、首先直接在布局文件中设置:android:backgound="#FFFFFFFF",android:textcolor="#00000000"。
2、其次把颜色提取出来形成资源,放在资源文件下面(values/drawable/color.xml):#FFFFFFFF
3、最后在布局文件中用android:backgound="@drawable/white"android:textcolor="@drawable/black"或者在java文件中通过setBackgroundColor(int color), setBackgroundResource(int resid),setTextColor(int color)即可。
⑤ android设置linearlayout布局的背景颜色,怎么动态改变背景颜色
1、开始打开Android IDE,这里以常用的Android Studio软件的3.2版本为例,然后可以新建一个工程项目,也可以使用当前已经存在的工程,点击后等待整个项目加载完毕再进行后续的操作。
⑥ Android中TextView中的文字颜色设置setTextColor的用法
原文链接http://blog.csdn.net/u012532559/article/details/44925285
Android 中设置TextView的颜色有方法setTextColor,这个方法被重载了,可以传入两种参数。一种方法是传入int color值,要注意这个int不是R文件中自动分配的十六进制int值,这是Color类中的静态方法构造出来的颜色int值。另一种方法是通过ColorStateList得到xml中的配置的颜色的。好多需要xml中配置的都要类似这样的映射xml文件(比如一个按钮事件的选择器,默认状态为颜色A,点击时状态为颜色B等等选择效果)。
setTextColor的两种重载方法如下:
[java] view plain
publicvoidsetTextColor(intcolor) {
mTextColor = ColorStateList.valueOf(color);
updateTextColors();
}
publicvoidsetTextColor(ColorStateList colors) {
if(colors ==null) {
thrownewNullPointerException();
}
mTextColor = colors;
updateTextColors();
}
第一种重载方法有以下实现方式:
方法一:通过ARGB值的方式
textview.setTextColor(Color.rgb(255,255, 255));
textview.setTextColor(Color.parseColor("#FFFFFF"));
方法二:通过资源引用
textview.setTextColor(mContext.getResources().getColor(R.drawable.contact_btn_text_red))
#f2497c
第二种重载方法的实现:
[java] view plain
textview.setTextColor(mContext.getResources().getColorStateList(R.drawable.big_btn_text_color));
选择器big_btn_text_color.xml
[html] view plain
⑦ 关于Android颜色资源
R.color.red 这个是red的ID,不是你要的color,
Resources r = this.getResources();
r.getColor(R.color.red ) 这个才是颜色
⑧ Android 12 取色引擎相关问题
其实WallpaperManager从很早之前就提供了getWallpaperColors接口
==Tip: LocalWallpaperColorConsumer是hide接口,非源码编译的Apk无法引用==
取出的数据都封装在WallpaperColors中,可通过以下接口获取到原始数据
框架中只是负责提取出原始颜色 ,但有些时候直接使用原始颜色,并不能达到最好的效果。
例如:PixelLauncher的插件实现颜色动态变化,除了从Wallpaper中拿到颜色,还进行了二次加工,使其更符合Material Desgin的风格,这也是符合“Monet”主题系统 中的一部分,目前是没有开源的。所以一方或三方若想使用该特性,可以按需进行选择和二次加工。
很可惜,Google并没有为动态壁纸提供默认的取色逻辑。
壁纸的取色,最终会调用到WallpaperService的onComputeColors中,但该方法是空实现,框架只是提供了最基本的获取接口而已。
所以在Android 12之前,无论是静态壁纸或是动态 壁纸,若想要其他模块能获取到壁纸颜色的话,需要壁纸提供方,在实现WallpaperService的Engine时,也一并实现onCompleteColors方法,然后在颜色变化时调用notifyColorsChanged。
如图:
壁纸其实是通过Palette接口进行颜色提取的,基本上都能取到至少一种颜色。当真的取出失败或取出的颜色如果不符合期望,需要采用另外一套默认颜色,这是由各个各个业务去处理的,比如Launcher中的LauncherAppWidgetHostView,重写了setColorResources方法
具体流程见下图:
PixelLauncher是通过LocalWallpaperColorsExtractor的实现类进行颜色提取,该类继承于LocalColorExtractor,该类存在于Launcher3中,是空实现。可以看出,Google专门将Monet算法部分折分隐藏,只公开框架部分。
而LocalWallpaperColorsExtractor是通过调用WallpaperManager.addOnColorsChangedListener接口,获取onColorsChanged(RectF rectF, WallpaperColors wallpaperColors)中的返回信息,然后再对WallpaperColors中的颜色信息进行二次加工处理。
可以,Android 12已经在secure表中预定义了theme_customization_overlay_packages字段,在其中配置了是否要根据主屏幕变色还是预置颜色,然后进行资源Overlay的。
我们可以直接使用或借鉴这套逻辑,预置几套色值,并设置为使用基本颜色。
⑨ Android Studio如果希望在XML布局文件中调用颜色资源,可以使用( )调用
在xml中调用颜色可以直接使用@color/color_name直接调用
有心的话你应该也能看到或者可以想到,颜色是这么调用,同样String也是这么调用