【问题标题】:How to change the color primary,color primarydark ,etc [closed]如何更改原色,原色等[关闭]
【发布时间】:2016-09-03 13:48:58
【问题描述】:

我正在尝试制作一个应用程序,它可以选择更改应用程序的 color primarycolor primary dark。因此,用户可以根据选择更改颜色。我想在设置中给出这个选项。所以用户可以在 blackdark bluegreyblue 等之间进行选择。我知道如何在 xml 中设置应用程序的主题,但我想更改洞应用程序的颜色。 我想更改应用程序中所有活动和对话框的主题。因为不能像here 那样更改应用程序的主题,所以提到了。这就是为什么我想尽可能制作一个不同的颜色文件

  1. 我是否必须制作不同的颜色文件,就像我们必须为不同的语言做的那样?

  2. 如果是,那我该如何使用不同的颜色文件?

【问题讨论】:

  • 我知道这是可能的,因为大多数应用程序都提供了这个选项。但是如何

标签: android android-layout colors themes


【解决方案1】:

第一步:在res/values/styles.xml 中为每个颜色选项制作一个主题:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="Theme.MyAwesomeApp.Base" parent="Theme.AppCompat">
        <!-- Your common styles -->
    </style>

    <style name="Theme.MyAwesomeApp.Blue" parent="Theme.MyAwesomeApp.Base">
        <item name="colorPrimary">@color/material_indigo_500</item>
        <item name="colorPrimaryDark">@color/material_indigo_700</item>
        <item name="colorAccent">@color/material_light_blue_A200</item>
    </style>

    <style name="Theme.MyAwesomeApp.Red" parent="Theme.MyAwesomeApp.Base">
        <item name="colorPrimary">@color/material_red_500</item>
        <item name="colorPrimaryDark">@color/material_red_700</item>
        <item name="colorAccent">@color/material_red_A200</item>
    </style>

</resources>

第二步:覆盖活动的onCreate() 方法,以便使用所选主题调用setTheme()

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setTheme(getThemeIdChoosenByUser())
    setContentView(R.layout.myAwesomeLayout)
}

如果您有多个活动,请创建一个基类并像这样设置它们

public abstract class ThemeAwareBaseActivity extends AppCompatActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setTheme(getThemeIdChoosenByUser());
    }

    private int getThemeIdChoosenByUser() {
        // Lookup in SharedPreferences etc.
    }
}

public class Activity1 extends ThemeAwareBaseActivity {
    @Override
    public void onCreate(bundle) {
        super.onCreate(bundle);
        setContentView(R.layout.layout_for_activity1)
        // do extra stuff on your resources, using findViewById on your layout_for_activity1
    }
}

【讨论】:

  • 那么我的所有活动都必须这样做吗?
  • “这一切”是什么意思?
  • 因为我的应用将包含多个活动
  • 然后为您的所有活动创建一个基类。在你的基类中调用setTheme(),在你的活动中调用setContentView()像往常一样
  • 什么意思?
猜你喜欢
  • 1970-01-01
  • 2019-09-08
  • 2021-05-17
  • 1970-01-01
  • 2016-12-12
  • 1970-01-01
  • 2019-09-15
  • 1970-01-01
  • 2018-09-07
相关资源
最近更新 更多