如何动态获取Android应用程序主题背景颜色

时间:2014-02-14 05:13:35

标签: android android-layout background-color

我需要将主题背景颜色应用于TextView背景颜色。如果在此处描述过程位,则此文本字段用于为用户选择字体颜色。目前它是透明的。这是我到目前为止所尝试的:

TypedValue typedValue=new TypedValue();
                    getTheme().resolveAttribute(android.R.attr.windowBackground, typedValue, true);
                    if(typedValue.type >= TypedValue.TYPE_FIRST_COLOR_INT && typedValue.type <= TypedValue.TYPE_LAST_COLOR_INT){
                        backgroundColor=typedValue.data;

                        fontColorText=(TextView) findViewById(R.id.textValue);
                        fontColorText.setBackgroundColor(backgroundColor);
                    }

但这不适合我。

有人可以建议我如何动态获取主题颜色吗?

2 个答案:

答案 0 :(得分:0)

我发现这篇文章正在寻找解决同一问题的方法。你的问题帮助我得出了这个答案:

    TypedValue themeBackgroundColor = new TypedValue();
    int backgroundColor;

    if (getActivity().getTheme().resolveAttribute(android.R.attr.colorBackground,
            themeBackgroundColor, true)) {
        switch (themeBackgroundColor.type) {
            case TypedValue.TYPE_INT_COLOR_ARGB4:
                backgroundColor = Color.argb(
                        (themeBackgroundColor.data & 0xf000) >> 8,
                        (themeBackgroundColor.data & 0xf00) >> 4,
                        themeBackgroundColor.data & 0xf0,
                        (themeBackgroundColor.data & 0xf) << 4);
                break;

            case TypedValue.TYPE_INT_COLOR_RGB4:
                backgroundColor = Color.rgb(
                        (themeBackgroundColor.data & 0xf00) >> 4,
                        themeBackgroundColor.data & 0xf0,
                        (themeBackgroundColor.data & 0xf) << 4);
                break;

            case TypedValue.TYPE_INT_COLOR_ARGB8:
                backgroundColor = themeBackgroundColor.data;
                break;

            case TypedValue.TYPE_INT_COLOR_RGB8:
                backgroundColor = Color.rgb(
                        (themeBackgroundColor.data & 0xff0000) >> 16,
                        (themeBackgroundColor.data & 0xff00) >> 8,
                        themeBackgroundColor.data & 0xff);
                break;

            default:
                throw new RuntimeException("ClassName: couldn't parse theme " +
                        "background color attribute " + themeBackgroundColor.toString());
        }
    } else {
        throw new RuntimeException("ClassName: couldn't find background color in " +
                "theme");
    }

我确认colorBackground是Material,Holo和pre-Holo主题中的指定属性。此外,由于似乎不保证主题的背景是以AARRGGBB格式指定的,因此我输入了switch语句来处理所有有效格式。我已经检查了所有颜色的情况。希望它有所帮助。

答案 1 :(得分:-1)

<强> MainActivity.java:

    public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView t1 = (TextView)findViewById(R.id.text);

        Spannable s1 = new SpannableString("These is the Way we can change the background textView");        

        s1.setSpan(new ForegroundColorSpan(Color.BLUE), 1, 25, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

        t1.setText(s1);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

<强> activity_main.xml中:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >

<TextView
    android:id="@+id/text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginLeft="58dp"
    android:layout_marginTop="57dp"
    android:text="TextView" />

<强>输出:

image