私のアプリはAPI 28
をターゲットとしており、最小値はAPI 15
です。サポートライブラリとして、AndroidX
を使用しています。
次のようなアクティビティによってホストされる設定フラグメントがあります:
SettingsFragment.Java
package com.example.app;
import Android.os.Bundle;
import androidx.preference.PreferenceFragmentCompat;
public class SettingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.preferences, rootKey);
}
}
SettingsActivity.Java
package com.example.app;
import Android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
public class SettingsActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportFragmentManager().beginTransaction().replace(Android.R.id.content, new SettingsFragment()).commit();
}
}
そして、これがSettingsFragment.Java
が使用するXMLレイアウトです
preferences.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:Android="http://schemas.Android.com/apk/res/Android">
<SwitchPreference
Android:defaultValue="false"
Android:key="pref_switch"
Android:title="@string/switch" />
</PreferenceScreen>
設定階層のルートとして、レイアウトを実際に下位互換にするためにPreferenceScreen
またはandroidx.preference.PreferenceScreen
を使用する必要がありますか(AndroidXを使用)? 2つの違いは何ですか?ベストプラクティスは何ですか?
the docs から:
AndroidXは、Androidチームが Jetpack 内のライブラリの開発、テスト、パッケージ、バージョン、リリースに使用するオープンソースプロジェクトです。
AndroidXは、元のAndroid Support Library を大幅に改善したものです。サポートライブラリと同様に、AndroidXはAndroid OSおよびAndroidリリース間での後方互換性を提供します。AndroidXは、機能のパリティと新しいライブラリを提供することにより、サポートライブラリを完全に置き換えます。さらに、AndroidXには次の機能が含まれます。
- AndroidXのすべてのパッケージは、文字列
androidx
で始まる一貫した名前空間にあります。サポートライブラリパッケージは、対応するandroidx.*
パッケージにマップされています。すべての古いクラスとビルドアーティファクトの新しいクラスへの完全なマッピングについては、 Package Refactoring ページを参照してください。
簡単に言えば、最新のコンポーネントと機能を備えているため、サポートライブラリの代わりに使用するのは新しいライブラリです。
したがって、PreferenceScreen
はandroidx.preference.PreferenceScreen
と同じですが、異なるラッパーにバンドルされています。