Override default Android themes

前端 未结 2 464
南笙
南笙 2021-01-02 07:02

I\'ve been able to override any themes that have names with \"android:\" prepended to them, but the Android themes.xml also defines properties that don\'t seem to be able to

相关标签:
2条回答
  • 2021-01-02 07:19

    You can overwrite standard attributes the same way you modified such properties as windowNoTitle, just don't forget to add android: prefix like this:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <style name="SEclubTheme" parent="@android:style/Theme">
            <item name="android:colorForeground">@color/bright_foreground_dark</item>
            <item name="android:colorBackground">@color/background_dark</item>
        </style>
    </resources>
    
    0 讨论(0)
  • 2021-01-02 07:33

    Without the attr prefix, your colorBackground becomes an attribute that you need to define. Consider the following example where theme_dependent_icon is defined in a styles.xml:

    <resources xmlns:android="http://schemas.android.com/apk/res/android">
        <declare-styleable name="custom_menu">
                <attr name="theme_dependent_icon" format="reference"/>
        </declare-styleable>
        <style name="MyDarkTheme" parent="android:Theme" >
            <item name="theme_dependent_icon">@drawable/ic_search_dark</item>
        </style>
        <style name="MyLightTheme" parent="android:Theme.Light" >
            <item name="theme_dependent_icon">@drawable/ic_search_light</item>
        </style>
    </resources>
    

    Then, you can use the attribute via ?attr/theme_dependent_icon in your main_activity.xml:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="?attr/theme_dependent_icon" />
    </LinearLayout>
    

    In this example, because I used custom theme names MyDarkTheme and MyLightTheme, they need to be selected during onCreate of your main activity prior to setContentView, i.e.

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setTheme(R.style.MyDarkTheme); // causes ic_search_dark.png to be shown
        // setTheme(R.style.MyLightTheme); // causes ic_search_light.png to be shown
        setContentView(R.layout.main_activity);
    }
    

    Calling setTheme() is one way of selecting a theme during runtime. Another way is to define multiple versions of styles.xml in your resources under the values, values-11, values-14 corresponding to default theme, theme for Android 3.0 (API-11) and theme for Android 4.0 (API-14).

    0 讨论(0)
提交回复
热议问题