42

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の場合は、そのバージョンのAndroidのテーマを使用します。等...

これにアプローチする簡単な方法はありますか?4.0では、使用できるテーマが追加されていることに気付きましたTheme.DeviceDefaultが、これは古いAPIレベルでは役に立ちません。これに対する最善のアプローチは何ですか?

4

2 に答える 2

72

現在、Android デバイスで利用できるテーマは最大 3 つ、場合によっては 4 つです (.Lightバリエーションや類似のものは含まれません) 。

Theme

テーマ

2.3 Gingerbread(10) までの Android の最も初期のバージョンのデフォルト (これらのバージョンでのマイナーなスタイル変更を含む)


Theme.Holo

Theme.ホロ

Android 3.0 Honeycomb で導入 (11)


Theme.Material

Theme.Material

Android 5.0 Lollipop の新機能 (21)


Theme.DeviceDefault

(なんでもいいです)

4.0 Ice Cream Sandwich (14) で導入されました。これは、デバイス メーカーがカスタマイズできるテーマです。これは、デバイスのネイティブな外観を表します。つまり、Nexus デバイス (および Android Studio のデザイン エディター) の Holo または Material であり、他のデバイスでカスタム化されている可能性があります。「何かカスタム」がオプションでない場合、それらのデバイスにはストック テーマが付属している必要があります。ただし、ストック テーマが必要なアプリはそれを指定する必要があります。


これに対する最善のアプローチは何ですか?

テーマなし + targetSdkVersion >= 14

最も簡単ですが、必ずしも最適とはいえないオプションは、テーマをまったく定義しないことです。Android がデフォルトを選択します。しかし、Android は、予期しないテーマでアプリを驚かせたくないので、おそらくアプリを設計したテーマにフォールバックします。内部を調べることでそうしandroid:targetSdkVersionますAndroidManifest.xml(現在はgradleを介して設定できます)。

  • Themeのみ(つまり、API レベル 3 ~ 10)しかなかった古いプラットフォームを対象とするアプリは、Theme.
  • 11 ~ 13 歳をターゲットとするアプリは get Theme.Holo.
  • 14歳以上の方が対象となりますTheme.DeviceDefault

Theme.Materialこれは下位互換性のためだけのものであるため、古い Gingerbread フォンを使用することはできません。したがって、テーマなし + ターゲット 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.xmlAPI レベル 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>

注: または、 in を指定するTheme.DeviceDefaultだけ/res/values-v14/styles.xmlでデフォルトの外観にすることができますが、デザインを微調整することはできません。v14 オーバーライドを追加しても問題ありません。結局、DeviceDefault と Holo は異なる可能性があります。


AndroidManifest.xmlカスタムテーマを使用する場所です。たとえば、アプリケーション全体のデフォルトとして:

...
<application
    android:theme="@style/AppTheme"
    ...

公式ドキュメントへのリンク

プラットフォームのバージョンに基づいてテーマを選択する- リソース構成を介してさまざまなスタイルを定義するための公式ドキュメント

Holo Everywhere - デフォルトのメカニズムと DeviceDefault / Holo テーマを説明するブログ記事

マテリアル テーマの使用- マテリアル ドキュメント

于 2012-03-22T23:51:40.243 に答える
3

values/styles.xml でテーマを宣言し、values-v11/styles.xml でテーマを Holo バージョンでオーバーライドできます。

値/styles.xml:

 <style name="DialogTheme" parent="@android:style/Theme.Dialog"></style>

値-v11/styles.xml:

 <style name="DialogTheme" parent="@android:style/Theme.Holo.Light.Dialog.NoActionBar"></style>

そのようにすると、API 11 以降のデバイスでは Holo テーマが使用され、その他のデバイスでは通常のテーマが使用されます。

よろしく ステファン・ヴァンスガード

于 2013-06-19T18:46:25.953 に答える