使用androidx.preference.PreferenceScreen和PreferenceScreen之间的区别

Yan*_*rin 5 android android-preferences sharedpreferences android-xml androidx

我的应用定位到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);

    }
}
Run Code Online (Sandbox Code Playgroud)

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是 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>
Run Code Online (Sandbox Code Playgroud)

作为首选项层次结构的根,我应该使用PreferenceScreen还是androidx.preference.PreferenceScreen使布局实际上向后兼容(使用AndroidX)?两者有什么区别?最佳做法是什么?

kar*_*ran 2

来自文档

AndroidX 是 Android 团队用来在Jetpack中开发、测试、打包、版本和发布库的开源项目。

AndroidX 是对原始 Android支持库的重大改进。与支持库一样,AndroidX 与 Android 操作系统分开提供,并提供跨 Android 版本的向后兼容性。AndroidX 通过提供同等功能和新库来完全取代支持库。此外 AndroidX 还包括以下功能:

  • AndroidX 中的所有包都位于以字符串 开头的一致命名空间中androidx。支持库包已映射到相应的androidx.*包中。有关所有旧类和构建工件到新类的完整映射,请参阅 包重构页面。

因此,简单来说,您应该使用新库而不是支持库,因为它具有最新的组件和功能。

因此,您的PreferenceScreen包装相同androidx.preference.PreferenceScreen,但捆绑了不同的包装。