web-dev-qa-db-ja.com

Androidデフォルトのテーマ

私は1つのAndroid=アプリケーションを作成していますが、テーマについて考えていました。

Androidアプリケーションのテーマを宣言しない場合、どのテーマが使用されますか?この情報はどこにありますか?どちらを使用するための基準は何ですか?

私が考えていたのは、自分のすべてのアプリケーションをカスタマイズする場合、1つのテーマを拡張して、カスタマイズするすべてのアイテムをカスタム化する必要があることです。

そして、それらの1つをデフォルトとして想定するとどうなりますか?天気をもう一度カスタマイズする必要がありますか?デフォルトのものをどのようにして知ることができますか?

17
user1851366

デフォルトのテーマは、APIレベルによって異なります(一般的なUIとの一貫性を保つため)。

API <10では、テーマはThemeと呼ばれる一連のスタイル(以下のリンクにあります)でしたが、そのAPI 10以上では、デフォルトのテーマはTheme_HoloそしてAPI 21以降、デフォルトのテーマはTheme.Material

これらのスタイルのほとんどは、Android.supportライブラリ。

PS:ライトテーマは常にデフォルトのテーマです。

18
shkschneider

Androidでデフォルトのテーマを選択するのではなく、自分でデフォルトのテーマを定義することをお勧めします。これは、Android mayはデフォルトのテーマがまったく異なるため、レイアウトがめちゃくちゃになる可能性があります。

アプリケーションのテーマはAndroidManifest.xmlで宣言できます

<application Android:theme="@style/MyTheme" .....>

次に、res/valuesフォルダで、ファイルthemes.xmlを編集または追加し、次のようなものを追加します。

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <style name="MyTheme" parent="@Android:style/Theme.Holo">
         ... customize your theme here
    </style>
</resources>

テーマのparentを好きなように編集できます...

anyのカスタマイズがまったく必要ない場合は、@Android:style/Theme.HoloAndroidManifest.xmlを直接使用することもできます。

APIバージョンが11未満の場合はTheme.AppCompat.Holoを使用します

4
Populus

アプリのデフォルトのテーマは Resources.Java

    /**
 * Returns the most appropriate default theme for the specified target SDK version.
 * <ul>
 * <li>Below API 11: Gingerbread
 * <li>APIs 11 thru 14: Holo
 * <li>APIs 14 thru XX: Device default dark
 * <li>API XX and above: Device default light with dark action bar
 * </ul>
 *
 * @param curTheme The current theme, or 0 if not specified.
 * @param targetSdkVersion The target SDK version.
 * @return A theme resource identifier
 * @hide
 */
public static int selectDefaultTheme(int curTheme, int targetSdkVersion) {
    return selectSystemTheme(curTheme, targetSdkVersion,
            com.Android.internal.R.style.Theme,
            com.Android.internal.R.style.Theme_Holo,
            com.Android.internal.R.style.Theme_DeviceDefault,
            com.Android.internal.R.style.Theme_DeviceDefault_Light_DarkActionBar);
}
/** @hide */
public static int selectSystemTheme(int curTheme, int targetSdkVersion, int orig, int holo,
        int dark, int deviceDefault) {
    if (curTheme != 0) {
        return curTheme;
    }
    if (targetSdkVersion < Build.VERSION_CODES.HONEYCOMB) {
        return orig;
    }
    if (targetSdkVersion < Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
        return holo;
    }
    if (targetSdkVersion < Build.VERSION_CODES.CUR_DEVELOPMENT) {
        return dark;
    }
    return deviceDefault;
}

APIレベルによって異なるため、AndroidManifest.xmlで独自のAppThemeを定義して、すべてのAPIレベルのデバイスでテーマを保証することをお勧めします。

Plsは以前の回答を参照します。

1
Thomas Liu