2017-12-22 23 views
0

私は最近、Androidプログラミングの学習を始めました。私はAndroidがAndroid API 21からMaterial Themeをサポートしていることを知りました。APIレベル19で重大なテーマが破棄されないのはなぜですか?

昨日、1つのアクティビティで小さなテストアプリケーションを作成しました。アクティビティは、アクティビティクラスを拡張します。最小SDKは19、ターゲットSDKは27、コンパイルSDKは27です。

テーマをMaterial.Dialogに変更し、Android 27デバイスでアプリケーションを実行しました。期待どおりに完璧に動作しました。

しかし、私はAndroid 19デバイスでそれを実行しようとしましたが、私はそれが動作しないと思っていました。しかし、それは間違いなく走った。もちろん、それはMaterial.Dialogテーマを適切にレンダリングしませんでした。それは通常の暗いテーマのようにそれをレンダリングします。アプリケーションは完全に機能していました。

私を驚かせました。マテリアルテーマを使用するアプリケーションが21未満のAPIで実行されている場合、なぜ壊れないのですか? APIレベル21は重要なテーマにとって難しい要件ではありませんか?

また、Androidは旧バージョンとの互換性があることを知りました(古いAPI用に設計されたプログラムは新しいAPIで実行できます)。

build.gradleの依存関係のセクションには、以下になります。

dependencies { 
    implementation fileTree(include: ['*.jar'], dir: 'libs') 
    implementation 'com.android.support.constraint:constraint-layout:1.0.2' 
    testImplementation 'junit:junit:4.12' 
    androidTestImplementation 'com.android.support.test:runner:1.0.1' 
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' 
} 

API 19のAndroidのエミュレータのスクリーンショットを以下に示します。幸いなこと enter image description here

+0

ライブラリとの下位互換性が追加されました。そして、それは下位互換性をどの程度作り出しているのですか? – Zoe

+0

@Zoeあなたのコメントは私の質問に答えられませんでしたが、別の面白い質問がありました:なぜ後方互換性をサポートするために別のライブラリが必要でしょうか?上位レベルのAPIには、下位レベルのAPIのすべての機能が既に含まれていますか? – carawan

+0

appcompat(/ supportライブラリ)はライブラリです。それはAPIのバージョンに応じて、新しいapiと古いapiを呼び出す、それが動作する方法です。そして材料設計のためにはもっと複雑です(どのようにtbhが動作するかは完全にはわかりません) – Zoe

答えて

0

、私は私の同僚の1で話をし、彼は私の質問に答えました。以下は短い会話の履歴です:

私の同僚:テーマはアプリのルックアンドフィールに影響します。したがって、API 19デバイスでアプリケーションを読み込むと、アプリケーションは機能し続けますが、正しく表示されないことが予想されます。

私:ありがとうございます。私は、Android互換性をよりよく理解するためにサポートライブラリを使用しませんでした。 あなたの答えに基づいて、技術的には、私のアプリケーションはAPI 10でも正しく機能するはずです。そうですか? (しかし、正しくレンダリングされません。)

同僚:https://developer.android.com/training/material/theme.htmlは言いながら、はい、それは

ので、「素材のテーマは、上記のAndroid 5.0(APIレベル21)でのみ使用可能である必要があります。 「アプリが重要なテーマを利用する場合、21未満のAPIレベルでは機能せず、中断します」と解釈されるべきではありません。 「21未満のAPIレベルでは正しく表示されないかもしれませんが、正しく機能しています」と解釈する必要があります。

関連する問題