我可以根据不同选择的对话框更改主题,但我也想将一些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背景将更改为我想要的颜色,而不是布局的其余部分。这对我来说没有整体主题部分,我认为添加动态主题而不是单独更改每个布局和视图可能更容易。
答案 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>