使用RadioButtons

时间:2015-05-14 08:49:13

标签: android styles radio-button themes

您好我在styles.xml中有四个自定义样式,我正在尝试使用RadioGroup来选择整个应用程序的整体样式。

<style name="blueTheme" parent="android:Theme.Light.NoTitleBar.Fullscreen">
    <item name="android:windowBackground">@color/blue_background</item>
    <item name="android:textColorPrimary">@color/blue_text</item>
</style>
<style name="redTheme" parent="android:Theme.Light.NoTitleBar.Fullscreen">
    <item name="android:windowBackground">@color/red_background</item>
    <item name="android:textColorPrimary">@color/red_text</item>
</style>
<style name="greenTheme" parent="android:Theme.Light.NoTitleBar.Fullscreen">
    <item name="android:windowBackground">@color/green_background</item>
    <item name="android:textColorPrimary">@color/green_text</item>
</style>
<style name="bwTheme" parent="android:Theme.Light.NoTitleBar.Fullscreen">
    <item name="android:windowBackground">@color/bw_background</item>
    <item name="android:textColorPrimary">@color/bw_text</item>
</style>

以下是我实际处理RadioGroup选择的代码,我之前曾尝试使用CheckBoxes,这就是为什么名称都是复选框。

blueCheckBox = (RadioButton) findViewById(R.id.blueCheckBox);
    redCheckBox = (RadioButton) findViewById(R.id.redCheckBox);
    greenCheckBox = (RadioButton) findViewById(R.id.greenCheckBox);
    bwCheckBox = (RadioButton) findViewById(R.id.bwCheckBox);

    RadioGroup radioGroup = (RadioGroup) findViewById(R.id.themeRadioGroup);
    radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()
    {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            // checkedId is the RadioButton selected

            switch(checkedId) {
                case R.id.blueCheckBox:
                        getApplication().setTheme(R.style.blueTheme);
                    break;
                case R.id.redCheckBox:
                    getApplication().setTheme(R.style.redTheme);
                    break;
                case R.id.greenCheckBox:
                    getApplication().setTheme(R.style.greenTheme);
                    break;
                case R.id.bwCheckBox:
                    getApplication().setTheme(R.style.bwTheme);
                    break;
            }
        }
    });

我遇到的问题是整体风格根本不会改变。在我的AndroidManifest.xml文件中,我将我的主题默认为

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/blueTheme" >

但尽管如此,当我运行我的应用程序时,主题不是blueTheme。 blueTheme没有我所有应用程序活动中当前显示的颜色。 由于某种原因,显示的主题具有灰色文本和深灰色/黑色背景,正确显示的唯一颜色是我在每个单独的布局/ activity_myActiviitesThatHaveButtons xml文件中手动设置的按钮的背景颜色。我不确定我做错了什么,有人可以尝试提供一些帮助吗?谢谢你的帮助

P.S:不确定这是否重要,但我相信我的min API设置为8,我相信这就是我的教授们想要设定的。

1 个答案:

答案 0 :(得分:0)

创建一个覆盖onCreate的基本活动,并根据首选项设置活动的主题。然后让所有活动覆盖此首选项。当用户在单选按钮上更改其选择时,将设置首选项。

可以在之前回答的类似问题上找到更多信息:

Switching application-wide theme programmatically?