私は最近、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のエミュレータのスクリーンショットを以下に示します。幸いなこと
ライブラリとの下位互換性が追加されました。そして、それは下位互換性をどの程度作り出しているのですか? – Zoe
@Zoeあなたのコメントは私の質問に答えられませんでしたが、別の面白い質問がありました:なぜ後方互換性をサポートするために別のライブラリが必要でしょうか?上位レベルのAPIには、下位レベルのAPIのすべての機能が既に含まれていますか? – carawan
appcompat(/ supportライブラリ)はライブラリです。それはAPIのバージョンに応じて、新しいapiと古いapiを呼び出す、それが動作する方法です。そして材料設計のためにはもっと複雑です(どのようにtbhが動作するかは完全にはわかりません) – Zoe