Mon application cible API 28
et a un API 15
minimum. En tant que bibliothèque de support, j'utilise AndroidX
.
J'ai un fragment de préférence hébergé par une activité, comme ceci:
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();
}
}
Et voici la mise en page XML utilisée par SettingsFragment.Java
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>
En tant que racine de la hiérarchie des préférences, dois-je utiliser PreferenceScreen
ou androidx.preference.PreferenceScreen
pour que la présentation soit réellement compatible avec les versions antérieures (avec AndroidX)? Quelle est la différence entre les deux? Quelle est la meilleure pratique?
De les docs :
AndroidX est le projet open-source utilisé par l'équipe Android pour développer, tester, mettre en paquet, versions et librairies au sein de Jetpack .
AndroidX est une amélioration majeure par rapport au système d’origine Android Support Bibliothèque . Comme la bibliothèque de support, AndroidX est fourni séparément du fichier Android OS et offre une compatibilité ascendante sur Android communiqués. AndroidX remplace complètement la bibliothèque de support en fournissant parité des fonctionnalités et nouvelles bibliothèques. De plus, AndroidX inclut le Fonctionnalités suivantes:
- Tous les packages sous AndroidX résident dans un espace de noms cohérent commençant par la chaîne
androidx
. Les packages de la bibliothèque de support ont été mappé dans les packagesandroidx.*
correspondants. Pour une cartographie complète de toutes les anciennes classes et construire des artefacts aux nouveaux, voir le Refactoring de paquets page.
Donc, en termes simples, c’est une nouvelle bibliothèque que vous devriez utiliser à la place de la bibliothèque de support car elle possède les derniers composants et fonctionnalités.
Ainsi, votre PreferenceScreen
est identique à androidx.preference.PreferenceScreen
mais fourni avec un wrapper différent.