Android 2.1、2.2、2.3.3、3.0/3.1、および4.0.x向けに開発したいアプリがあります。これらのAPIレベルの間には、約3種類のテーマがあります。最新の4.0.xテーマはHoloです。
とにかく、どのデバイスでもデフォルトのAndroidテーマを使用します。4.0.xデバイスの場合はHoloを使用します。2.3.3の場合はIそのバージョンのAndroidなどのテーマを使用したい...
これにアプローチする簡単な方法はありますか? 4.0では、Theme.DeviceDefault
使用できるテーマですが、これは古いAPIレベルでは役に立ちません。これに対する最善のアプローチは何ですか?
現在、Androidデバイス(.Light
バリエーションなどは含まれていません)で使用できるテーマが最大3つあります。
Theme
Android 2.3 Gingerbread(10)までの初期バージョンのデフォルト。これらのバージョンのいくつかのマイナーなスタイル変更を含む
Theme.Holo
Android 3.0 Honeycomb(11)で導入
Theme.Material
Android 5.0 Lollipop(21)の新機能
Theme.DeviceDefault
(何でもいい)
4.0アイスクリームサンドイッチ(14)が導入されました。このテーマは、デバイスメーカーがカスタマイズできます。これは、デバイスのネイティブな外観を表します。つまり、NexusデバイスのHoloまたはMaterial(&Android Studioのデザインエディター)、他のデバイスではカスタムなものかもしれません。オプションとして、これらのデバイスにはストックテーマが付属している必要がありますが、ストックテーマが必要なアプリはそれを指定する必要があります。
これに対する最善のアプローチは何ですか?
最も単純ですが、必ずしも最適ではないオプションは、テーマをまったく定義しないことです。 Androidはデフォルトを選択します。ただし、Androidは、予期しないテーマでアプリを驚かせたくないので、テーマに戻りますあなたはおそらくあなたのアプリを設計していたでしょう。それはAndroid:targetSdkVersion
内のAndroidManifest.xml
(今日ではgradleを介して設定できます)を見ることによってそうします。
Theme
(つまり、APIレベル3〜10)しかなかった古いプラットフォームをターゲットとするアプリは、Theme
のみを取得します。Theme.Holo
を取得します。Theme.DeviceDefault
を取得します。これは単に後方互換性のためであるため、古いGingerbread電話ではTheme.Material
を取得できません。したがって、テーマなし+ターゲット14+ =デバイスのデフォルト。
Androidのリソースオーバーレイシステムでは、デバイスAPIレベルに基づいてスタイルを指定できます。たとえば、res/values-v11
とres/values-v21
のスタイルの異なるバージョン。これは、Android Studioが自動的にセットアップするアプリを介して新しく作成されたアプリでもあります。
例として、.Light
テーマアプリの最も基本的なセットアップは次のようになります。
/res/values/styles.xml
はすべてのデバイスに適用され、ベースとして機能します
<resources>
<style name="AppTheme" parent="Android:Theme.Light"/>
</resources>
/res/values-v11/styles.xml
は、APIレベル11以上(21以上のデバイスを含む)を持つすべてのデバイスにロードされます。ただし、実際には「AppTheme」の最新バージョンのみが使用されます。
<resources>
<style name="AppTheme" parent="Android:Theme.Holo.Light"/>
</resources>
/res/values-v21/styles.xml
<resources>
<style name="AppTheme" parent="Android:Theme.Material.Light"/>
</resources>
注:代わりにTheme.DeviceDefault
を/res/values-v14/styles.xml
に指定するだけで、デフォルトの外観を得るのに十分ですが、デザインを微調整することはできません。 v14オーバーライドを追加しても害はありません。結局、DeviceDefaultとHoloは異なる可能性があります。
AndroidManifest.xml
は、カスタムテーマを使用する場所です。例えば。アプリケーション全体のデフォルトとして:
...
<application
Android:theme="@style/AppTheme"
...
プラットフォームのバージョンに基づいてテーマを選択 -リソース設定を介して異なるスタイルを定義するための公式ドキュメント
Holo Everywhere -デフォルトのメカニズムとDeviceDefault/Holoテーマを説明するブログ投稿
マテリアルテーマの使用 -マテリアルドキュメント
Values/styles.xmlでテーマを宣言し、values-v11/styles.xmlでテーマをHoloバージョンでオーバーライドできます。
values/styles.xml:
<style name="DialogTheme" parent="@Android:style/Theme.Dialog"></style>
values-v11/styles.xml:
<style name="DialogTheme" parent="@Android:style/Theme.Holo.Light.Dialog.NoActionBar"></style>
そうすれば、API 11以降のデバイスにはHoloテーマがあり、他のデバイスには通常のテーマがあります。
よろしくステファン・ヴァンスガード