Android 如何更改原色、原色暗等

Android 如何更改原色、原色暗等,android,android-layout,colors,themes,Android,Android Layout,Colors,Themes,我正在尝试制作一个应用程序,该应用程序可以选择更改应用程序的原色,原色暗。因此,用户可以根据选择更改颜色。我想在设置中提供此选项。因此用户可以选择黑色、深蓝色、灰蓝色等。我知道如何在xml中设置应用程序的主题,但我想更改应用程序的颜色。 我想更改应用程序中所有活动和对话框的主题。因为无法更改应用程序中提到的主题。这就是为什么我想做一个不同颜色的文件,如果可能的话 我是否需要制作不同的颜色文件,就像我们为不同的语言所做的那样 如果是,我如何使用不同的颜色文件呢 第一步:在res/values/st

我正在尝试制作一个应用程序,该应用程序可以选择更改应用程序的原色原色暗。因此,用户可以根据选择更改颜色。我想在设置中提供此选项。因此用户可以选择黑色、深蓝色、灰蓝色等。我知道如何在xml中设置应用程序的主题,但我想更改应用程序的颜色。 我想更改应用程序中所有活动和对话框的主题。因为无法更改应用程序中提到的主题。这就是为什么我想做一个不同颜色的文件,如果可能的话

  • 我是否需要制作不同的颜色文件,就像我们为不同的语言所做的那样

  • 如果是,我如何使用不同的颜色文件呢


  • 第一步:在
    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>
    
    如果您有多个活动,请创建一个基类,并按如下方式设置它们

    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()
    ,这是什么意思?
    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
        }
    }