在问这个问题之前我已经进行了研究,但是建议的答案对我没有用。
我的colors.xml
文件中列出了很多颜色,如下所示:
<color name="material_red">#F44336</color>
<color name="material_orange">#FF5722</color>
<color name="material_yellow">#FFC107</color>
在我的主布局中,将一个应用于背景,如下所示:
<RelativeLayout
….
android:background="@color/material_blue"/>
我需要以编程方式获取布局的确切颜色类型,这是我到目前为止已经尝试过的颜色:
RelativeLayout relativeLayout = findViewById(…);
Drawable layoutDrawable = relativeLayout.getBackground();
String layoutColor;
if(layoutDrawable instanceOf ColorDrawable){
int color = ((ColorDrawable)layoutDrawable).getColor();
layoutColor = Integer.toHexString(color);
}
但是结果是这样的:ff2196f3
。
如何获得准确的十六进制值或应用的颜色资源中的颜色?
答案 0 :(得分:0)
ff2196f3
几乎就是您想要的,但不包括造成 opacity 的第一个字节。这样,您的颜色就是2196f3
+ ff
,因为它是不透明的。
您无法获取颜色资源,因为它不一定是颜色资源,因此可以在没有颜色资源的情况下对其进行动态设置。但是,如果需要,您可以遍历颜色资源并将其与所获得的颜色进行比较。
答案 1 :(得分:0)
尝试一下
String hexColor = "#" + layoutColor.substring(2, layoutColor.length());
Log.e("MainActivity.java", "The hex color is-" + hexColor);
答案 2 :(得分:0)
这很可能是重复的,并且已经here得到了答复。
Android颜色整数是Android上颜色的最常见表示形式,根据文档,它总是使用4个成分(Alpha,红色,绿色,蓝色)在sRGB空间中定义颜色。因此,字符串中的前两位数字是Alpha通道。但是,根据@Josh的建议,您可以通过屏蔽获得后6位数字:
if(layoutDrawable instanceof ColorDrawable){
int color = ((android.graphics.drawable.ColorDrawable)layoutDrawable).getColor();
layoutColorWithoutAlpha = String.format("#%06X", (0xFFFFFF & color));
}
答案 3 :(得分:-1)
要获取布局的背景色:
LinearLayout lay = (LinearLayout) findViewById(R.id.lay1);
ColorDrawable viewColor = (ColorDrawable) lay.getBackground();
int colorId = viewColor.getColor();
如果它是RelativeLayout,则只需找到其ID并使用那里的对象而不是LinearLayout。