如何更改主要颜色,颜色primarydark等

Nee*_*ava 0 android themes colors android-layout

我试图让应用赋予选项来改变基色,色彩原色暗的应用程式.因此,用户可以根据选择更改颜色.我想在设置中给出这个选项.所以用户可以选择黑色,深蓝色,蓝色等.我知道如何在xml中设置应用程序的主题,但我想更改孔应用程序的颜色.我想改变所有的活动和对话的主题应用.作为一个不能作为改变应用的主题,在这里它被提及.这就是为什么我想在可能的情况下制作不同的颜色文件

  1. 我是否必须为不同的语言制作不同的颜色文件?

  2. 如果是的话,我怎么能使用不同的颜色文件呢?

lar*_*fer 10

第一步:为每个颜色选项制作一个主题:

<?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>
Run Code Online (Sandbox Code Playgroud)

第二步:覆盖res/values/styles.xml您的活动方法,以便onCreate()使用选择的主题进行调用:

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

如果您有多个活动,请创建基类并将其设置为这样

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
    }
}
Run Code Online (Sandbox Code Playgroud)