从TypedValue中提取背景Color / Drawable

时间:2012-08-24 06:44:26

标签: android resources styles

我正在开发一个Android项目,并尝试检索窗口标题背景样式,然后提取背景颜色/ drawable(这样我就可以将它们应用到我的自定义标题栏布局)。我已经能够使用以下代码获得TYPE_REFERENCE样式:

    TypedValue a = new TypedValue();
            getTheme().resolveAttribute(android.R.attr.windowTitleBackgroundStyle, a, true);
            if(a.type == TypedValue.TYPE_REFERENCE){
    // GOES IN HERE
// Drawable d = getResources().getDrawable(a.resourceId); // THROWS A RESOURCES NOT FOUND EXCEPTION
    }

我是如何成功地弄清楚指向的资源是什么,从那里到颜色/抽屉的空白(尽管在Google中轻松进行了2个小时的拼写)。我假设它是在XML中定义的样式:如何以编程方式实际获取该样式的属性/属性/设置并为背景获取颜色/ Drawable?

1 个答案:

答案 0 :(得分:5)

啊,想通了:

TypedValue a = new TypedValue();
getTheme().resolveAttribute(android.R.attr.windowTitleBackgroundStyle, a, true);
        if(a.type == TypedValue.TYPE_REFERENCE){
            TypedArray b = this.obtainStyledAttributes(a.resourceId, new int[]{
                    android.R.attr.background
            });
            b.getValue(0, a);
                        titleBar.setBackgroundResource(a.resourceid);
            b.recycle();
        }