动态更改主题然后更改LinearLayout的背景失败

时间:2015-06-27 04:11:56

标签: android android-layout

我可以根据不同选择的对话框更改主题,但我也想将一些LinearLayouts的背景颜色更改为其他内容,但它不会生效。对布局的任何更改都不会更改,并且仍然具有主题的背景颜色。

onCreate的部分:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    prefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
    colorBackgroundBlock = prefs.getInt("colorBackgroundBlock",R.color.block_main);
    colorTheme = prefs.getInt("colorTheme", R.style.defaultTheme);
    Utils.onActivityCreateSetTheme(this, colorTheme);
    setContentView(R.layout.activity_main);

    LinearLayout freeLinearLayoutBlock = (LinearLayout)
    findViewById(R.id.freeLinearLayoutBlock);
    // **** this is what doesn't change now  *****
    freeLinearLayoutBlock.setBackgroundResource(colorBackgroundBlock);
}

My Utils课程:

public class Utils{
public static void changeToTheme(Activity activity)
{
    activity.finish();
    activity.startActivity(new Intent(activity, activity.getClass()));
}

public static void onActivityCreateSetTheme(Activity activity, int theme)
{
    activity.setTheme(theme);
}
}

我的主题样式示例

<style name="defaultTheme" >
    <item name="android:background">@color/background_main</item>
    <item name="android:textColor">@color/text_main</item>
</style>

以下是我如何调用主题更改:

Utils.changeToTheme(MainActivity.this);

我在偏好设置中保存主题参考,以便用户在重新启动应用时获取最后选择的主题。此外,我在LinearLayout中有一个imageView(设置为.png图像)进行更改,imageView背景将更改为我想要的颜色,而不是布局的其余部分。这对我来说没有整体主题部分,我认为添加动态主题而不是单独更改每个布局和视图可能更容易。

1 个答案:

答案 0 :(得分:0)

这不能完全回答您的问题,但可以帮助您了解如何交替设置主题:Android Set Theme Dynamically

要根据活动的主题设置LinearLayout背景,您可以使用属性。为此,请查看此Android Themes, Styles and Attributes

<强>简体:

<!-- values/attr.xml -->
<resources>
    <attr name="testcolor" format="color" />
    ..
</resources>

<!-- values/styles.xml -->
<resources>
    <style name="AppTheme.Dark" parent="Theme.AppCompat.NoActionBar">
        <item name="backgroundLinearLayout">@color/backgroundLinearLayout</item>
        ..
    </style>
    ..
</resources>

<!-- layout/layout_1.xml -->
<LinearLayout
   ..
   android:background="?attr/backgroundLinearLayout">
</LinearLayout>