Android Settings

SystemSetting源码解析
项目在做设置相关,但在设置状态的同步和储存,不同列表之前的跳转上一直没法达到最优的想过,所以想看看Android源码中的设置是如何写的,虽然有难度,但慢慢看总能看懂的。
Preference Headers 是什么
android 9.0 http://androidxref.com/9.0.0_r3/xref/packages/apps/Settings/src/com/android/settings/ 源码位置
先看Android.mk include frameworks/base/packages/SettingsLib/common.mk 后面用到再看

packages/apps/Settings/src/com/android/settings/Settings.java
仅用于启动程序活动的别名,因为它属于每个配置文件。

public class Settings extends SettingsActivity //Top-level Settings activity

packages/apps/Settings/src/com/android/settings/SettingsActivity.java

  public class SettingsActivity extends SettingsDrawerActivity
      implements PreferenceManager.OnPreferenceTreeClickListener,
      PreferenceFragment.OnPreferenceStartFragmentCallback,
      ButtonBarHandler, FragmentManager.OnBackStackChangedListener {

Android 4.4 Settings

packages/apps/Settings/src/com/android/settings/Settings.java

public class Settings extends PreferenceActivity
        implements ButtonBarHandler, OnAccountsUpdateListener {
   

PreferenceActivity API29已经弃用,使用PreferenceFragmentCompat替换 https://developer.android.google.cn/guide/topics/ui/settings.html

设置源码介绍
https://blog.csdn.net/qq_34149526/article/details/83186719

PreferenceFragmentCompat的使用Demo

1.设置如何适配平板的?
AS中可以直接新建一个SettingsActivity

<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto">

    <Preference
        app:fragment="com.example.viewapplication.SettingsActivity$MessagesFragment"
        app:icon="@drawable/messages"
        app:key="messages_header"
        app:title="@string/messages_header" />

    <Preference
        app:fragment="com.example.viewapplication.SettingsActivity$SyncFragment"
        app:icon="@drawable/sync"
        app:key="sync_header"
        app:title="@string/sync_header" />

</PreferenceScreen>
 public static class MessagesFragment extends PreferenceFragmentCompat {
   

        @Override
        public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
   
            setPreferencesFromResource(R.xml.messages_preferences, rootKey);
        }
    }
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto">

    <EditTextPreference
        app:key="signature"
        app:title="@string/signature_title"
        app:useSimpleSummaryProvider="true" />

    <ListPreference
        app:defaultValue="reply"
        app:entries="@array/reply_entries"
        app:entryValues="@array/reply_values"
        app:key="reply"
        app:title="@string/reply_title"
        app:useSimpleSummaryProvider="true" />

</PreferenceScreen>

1.点击事件的处理

Preference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
   
                    @Override
                    public boolean onPreferenceClick(Preference preference) {
   
                        Log.d(TITLE_TAG, "onPreferenceClick() called with: preference = [" + preference + "]");
                        return false;
                    }
                });

2.保存值的读取

   SharedPreferences sharedPreferences =
            PreferenceManager.getDefaultSharedPreferences(this /* Activity context */);
    String name = sharedPreferences.getString(“signature”, "");

监听偏好设置值的更改
要监听 Preference 值的更改,您可以在两个接口中选择一个:

Preference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
   
                    @Override
                    public boolean onPreferenceChange(Preference preference, Object newValue) {
   
                        Log.d(TITLE_TAG, "onPreferenceChange() called with: preference = [" + preference + "], newValue = [" + newValue + "]");
                        return false;
                    }
                });
preferences.registerOnSharedPreferenceChangeListener(new SharedPreferences.OnSharedPreferenceChangeListener() {
   
            @Override
            public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
   
                Log.d(TITLE_TAG, "onSharedPreferenceChanged() called with: sharedPreferences = [" + sharedPreferences.getString(key,"") + "], key = [" + key + "]");
            }
        });

3.使用其他方式保存数据
3.1 采用Sqlite数据库保存数据

https://blog.csdn.net/qq_34149526/article/details/83186719
android 个版本设置的差异应该不大

/**
 * Top-level settings activity to handle single pane and double pane UI layout.
 */
public class Settings extends PreferenceActivity
        implements ButtonBarHandler, OnAccountsUpdateListener

PreferenceActivity加载R.xml.settings_headers布局

    /**
     * Populate the activity with the top-level headers.
     */
    @Override
    public void onBuildHeaders(List<Header> headers) {
   
        if (!onIsHidingHeaders()) {
   
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Settings模块是Android系统中的一个重要组成部分,它提供了用户对设备进行配置和管理的界面。它是一个完整的应用程序,由多个Activity和Fragment组成,主要包括以下几个部分: 1. 系统设置:包括网络、声音、显示、电池、存储、安全等设置,用户可以根据自己的需要对系统进行设置。 2. 应用设置:包括已安装应用的管理和配置,用户可以查看应用信息、权限、通知、存储、数据使用情况等。 3. 用户设置:包括用户账户和个人资料的管理和配置,用户可以添加、删除、切换用户账户,还可以修改个人资料、语言、时区等。 4. 开发者选项:为开发者提供了一些高级设置和调试工具,例如USB调试、CPU使用情况、布局边界等。 5. 关于手机:提供了设备的基本信息,包括设备型号、Android版本、内核版本、基带版本等。 Android Settings模块的实现主要依赖于Android框架中的SettingsProvider和Settings应用程序。SettingsProvider是一个ContentProvider,为Settings应用程序提供数据源,包括系统设置、应用设置、用户设置等。Settings应用程序则负责展示这些数据并提供用户交互界面。 总的来说,Android Settings模块为用户提供了方便、实用的设备配置和管理功能,同时为开发者提供了一些高级设置和调试工具,是Android系统中非常重要的一个组成部分。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值