设置 Part of Android Jetpack.
设置使用户能够改变应用的功能和行为。设置可以影响后台行为,例如应用与云同步数据的频率;设置的影响还可能更为深远,例如改变用户界面的内容和呈现方式。
建议使用 AndroidX Preference Library 将用户可配置设置集成至您的应用中。此库管理界面,并与存储空间交互,因此您只需定义用户可以配置的单独设置。此库自带 Material 主题,可在不同的设备和操作系统版本之间提供一致的用户体验。
使用入门
Preference
是 Preference Library 的基础构建基块。设置屏幕包含 Preference
层次结构。您可将此层次结构定义为 XML 资源,或通过代码构建层次结构。
以下部分将介绍如何使用 AndroidX Preference Library 构建简单的设置屏幕。
创建层次结构
以下示例展示通过 XML 定义的简单层次结构:
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"> <SwitchPreferenceCompat app:key="notifications" app:title="Enable message notifications"/> <Preference app:key="feedback" app:title="Send feedback" app:summary="Report technical issues or suggest new features"/> </PreferenceScreen>
该层级结构包含两个单独的 Preferences
:一个支持用户切换设置的 SwitchPreferenceCompat
,还有一个没有微件的基础 Preference
。
构建层次结构时,每个 Preference
都应配有唯一的密钥。
扩充层次结构
若要从 XML 属性中扩充层次结构,则需要先创建一个 PreferenceFragmentCompat
,替换 onCreatePreferences()
,然后提供 XML 资源进行扩充,如以下示例所示:
Kotlin
class MySettingsFragment : PreferenceFragmentCompat() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.preferences, rootKey) } }
Java
public class MySettingsFragment extends PreferenceFragmentCompat { @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { setPreferencesFromResource(R.xml.preferences, rootKey); } }
然后,与您对其他 Fragment
进行的操作一样,您可以将此 Fragment
添加到您的 Activity
:
Kotlin
class MySettingsActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) supportFragmentManager .beginTransaction() .replace(R.id.settings_container, MySettingsFragment()) .commit() } }
Java
public class MySettingsActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getSupportFragmentManager() .beginTransaction() .replace(R.id.settings_container, new MySettingsFragment()) .commit(); } }