android - 使用 androidx.preference.PreferenceScreen 和 PreferenceScreen 的区别

标签 android sharedpreferences android-xml android-preferences androidx

我的应用以 API 28 为目标,并且至少有 API 15。作为支持库,我使用的是 AndroidX
我有一个由 Activity 托管的偏好 fragment ,如下所示:

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)?两者有什么区别?最佳做法是什么?

最佳答案

来自 the docs :

AndroidX is the open-source project that the Android team uses to develop, test, package, version and release libraries within Jetpack.

AndroidX is a major improvement to the original Android Support Library. Like the Support Library, AndroidX ships separately from the Android OS and provides backwards-compatibility across Android releases. AndroidX fully replaces the Support Library by providing feature parity and new libraries. In addition AndroidX includes the following features:

  • All packages in AndroidX live in a consistent namespace starting with the string androidx. The Support Library packages have been mapped into corresponding androidx.* packages. For a full mapping of all the old classes and build artifacts to the new ones, see the Package Refactoring page.

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

因此,您的 PreferenceScreenandroidx.preference.PreferenceScreen 相同,但 bundle 了不同的包装器。

关于android - 使用 androidx.preference.PreferenceScreen 和 PreferenceScreen 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53046401/

相关文章:

android - 如何根据屏幕宽度调整虚线

android - 如何将 Set<Set<String>> 存储在 SharedPreferences 中?

android - 在支持 v7 的 xml 中应用 selectableItemBackground

android - 为什么不能将 INT 保存到 SharedPreferences?

java - 如何在共享首选项中保存 ListView 状态

android:layout_alignParentEnd 不适用于 API 14

android - LinearLayout 会干扰其他对象吗?

java - 如何获得完美的图像

当我按下刷新按钮时,android sunshine 应用程序实时数据未加载到列表中

android - 来自 navArgs 的数据(Bundle)在系统杀死和重新创建 Activity(和 Fragment)后是否仍然存在?