设置 Android Launcher 默认无抽屉模式
在定制 Android 系统时,我们经常需要调整 Launcher (桌面启动器) 的默认行为。其中一个常见的需求就是将默认的桌面风格设置为“无抽屉模式”(也称为单层模式),即所有应用图标都直接排列在主屏幕上,而不是隐藏在一个单独的应用抽屉里。本文将介绍如何通过修改配置文件来实现这一默认设置。
核心配置文件:config_ext.xml
Launcher 的许多扩展功能和默认值通常定义在一个特定的 XML 配置文件中。在这个例子中,相关的配置文件是 vendor/sprd/platform/packages/apps/Launcher3/res_unisoc/values/config_ext.xml。
要设置默认的桌面模式,我们需要关注该文件中的一个关键字符串资源:default_home_screen_style。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- ... 其他配置项 ... -->
<!-- 控制是否在设置中显示桌面风格切换选项 -->
<bool name="show_home_screen_style_settings">true</bool>
<!-- 关键:设置默认的桌面风格 -->
<!-- 可选值: "dual" (双层/有抽屉模式), "single" (单层/无抽屉模式) -->
<string name="default_home_screen_style" translatable="false">single</string>
<!-- ... 其他配置项 ... -->
</resources>
- default_home_screen_style: 这个配置项直接决定了 Launcher 首次启动或恢复出厂设置后的默认模式。
- 将其值设置为 "single" 即可实现默认 无抽屉模式。
- 如果想默认使用带应用抽屉的模式,则应将其值设置为 "dual"。
因此,要将默认模式设为无抽屉,只需确保 config_ext.xml 中 default_home_screen_style 的值是 single 即可
用户切换界面:MultiModeSettingActivity.java
虽然 config_ext.xml 设置了 默认值,但系统通常还会提供一个设置界面,让用户可以 手动切换 桌面模式。在这个例子中,MultiModeSettingActivity.java 就是负责这个功能的 Activity。
这个 Activity 的作用是读取当前的设置和默认设置,向用户展示选项,并在用户做出选择后保存新的偏好设置,然后重启 Launcher 以应用更改。
package com.unisoc.launcher3.multimode.settings;
import android.app.Activity;
import android.os.Bundle;
// ... 其他 import ...
import com.unisoc.launcher3.multimode.MultiModeUtilities;
public class MultiModeSettingActivity extends Activity implements View.OnClickListener {
// ... 其他成员变量 ...
String mDefaultMode; // 用于存储从 config_ext.xml 读取的默认模式
String mCurMode; // 用于存储用户当前选择的模式
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_multi_mode_setting);
// ... 初始化视图 ...
// 关键:读取 config_ext.xml 中定义的默认模式值
mDefaultMode = getResources().getString(R.string.default_home_screen_style);
// 读取用户当前保存的模式值
mCurMode = MultiModeUtilities.getHomeScreenStylePrefValue(this);
// 根据读取到的默认值和当前值,初始化界面选项状态
if (MultiModeUtilities.SINGLE.equals(mDefaultMode)) {
// 如果默认是 single (无抽屉) ... 初始化选项
} else {
// 如果默认是 dual (有抽屉) ... 初始化选项
}
// ...
}
@Override
public void onClick(View view) {
// ... 处理用户点击事件 ...
String newModel = (String) view.getTag(); // 获取用户选择的新模式
// ... 更新界面选中状态 ...
if (!mCurMode.equals(newModel)) {
// ... (省略了延迟和错误处理) ...
// 关键:保存用户选择的新模式到偏好设置中
MultiModeController.syncSaveNewModel(this, newModel);
// ... 重启 Launcher 使设置生效 ...
UtilitiesExt.exitLauncher(MultiModeSettingActivity.this);
}
}
}
可以看到,MultiModeSettingActivity 在 onCreate 时会通过 getResources().getString(R.string.default_home_screen_style) 读取 config_ext.xml 中设置的默认值,但它的主要职责是响应用户的交互,并将用户的选择持久化,覆盖掉默认设置

741

被折叠的 条评论
为什么被折叠?



