私は1つのAndroid=アプリケーションを作成していますが、テーマについて考えていました。
Androidアプリケーションのテーマを宣言しない場合、どのテーマが使用されますか?この情報はどこにありますか?どちらを使用するための基準は何ですか?
私が考えていたのは、自分のすべてのアプリケーションをカスタマイズする場合、1つのテーマを拡張して、カスタマイズするすべてのアイテムをカスタム化する必要があることです。
そして、それらの1つをデフォルトとして想定するとどうなりますか?天気をもう一度カスタマイズする必要がありますか?デフォルトのものをどのようにして知ることができますか?
デフォルトのテーマは、APIレベルによって異なります(一般的なUIとの一貫性を保つため)。
API <10では、テーマはTheme
と呼ばれる一連のスタイル(以下のリンクにあります)でしたが、そのAPI 10以上では、デフォルトのテーマはTheme_Holo
そしてAPI 21以降、デフォルトのテーマはTheme.Material
。
Theme
またはTheme.AppCompat
Holo_Theme
またはTheme.AppCompat
Theme.Material
これらのスタイルのほとんどは、Android.support
ライブラリ。
PS:ライトテーマは常にデフォルトのテーマです。
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.Holo
でAndroidManifest.xml
を直接使用することもできます。
APIバージョンが11未満の場合はTheme.AppCompat.Holo
を使用します
アプリのデフォルトのテーマは 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は以前の回答を参照します。