# 设置界面(PluginPreference)
通过实现 PluginPreference 接口,你可以为插件添加设置界面。
PS:目前(PluginSdkVersion = 2)仅可以实现一个主设置界面,暂时不支持多个设置界面和通过代码打开设置界面,我们会在后续更新中增加这些功能。
# 实现主设置界面
我们需要创建一个类实现 PluginPreference 接口,并在 onBuild 方法中添加选项数据。
目前支持添加的选项有:
- 选项头(Header)
- 文本输入(Input)
- 单选列表(List)
- 选项开关(Switch)
- 文本说明(Text)
package bin.mt.plugin;
import bin.mt.plugin.api.MTPluginContext;
import bin.mt.plugin.api.preference.PluginPreference;
public class MyPreference implements PluginPreference {
@Override
public void onBuild(MTPluginContext context, Builder builder) {
builder.addHeader("选项头1");
builder.addText("文本")
.summary("单纯用来显示文字");
builder.addText("MT论坛")
.summary("除了显示文字,点击还能打开网址")
.url("https://bbs.binmt.cc");
builder.addHeader("选项头2");
builder.addInput("选项-输入内容", "key_input")
.summary("请输入内容")
.defaultValue("默认值");
builder.addList("选项-单选列表", "key_list")
.summary("未选中任何项目")
// .defaultValue("1")
.addItem("项目1", "1").summary("选中了选项1")
.addItem("项目2", "2").summary("选中了选项2");
builder.addSwitch("选项-开关", "key_switch")
.defaultValue(true)
.summaryOn("开")
.summaryOff("关");
}
}
添加以上代码后,还需要在 manifest.json 文件中注册:
...
mainPreference: "bin.mt.plugin.MyPreference"
...
安装完插件后,进入插件管理界面,点击「设置界面Demo」即可看到设置:
界面效果:
# 获取配置值
通过上下文获取 SharedPreferences 实例,再通过选项 key 值调用相应的 get 方法即可获得选项值。
SharedPreferences preferences = context.getPreferences();
// 获取「选项-输入内容」的配置值
preferences.getString("key_input", "默认值");
// 获取「选项-单选列表」的配置值
preferences.getString("key_list", null);
// 获取「选项-开关」的配置值
preferences.getBoolean("key_switch", true);
# 使用本地化文本
使用本地化文本需要先调用 Builder 的 setLocalString() 方法,再使用{key}
格式设置属性值。
支持设置的属性有:
- 所有选项的 title
- 所有选项的 summary(包含 summaryOn 和 summaryOff )
- List.Item 的 name
- Input 的 Validator 的返回值
@Override
public void onBuild(MTPluginContext context, Builder builder) {
builder.setLocalString(context.getLocalString());
builder.addHeader("{key1}");
builder.addText("{key2}").summary("{key3}");
}
# PluginPreference 源码参考
/**
* 插件设置界面
*/
public interface PluginPreference {
/**
* 创建设置界面时调用,通过builder添加选项数据
*/
void onBuild(MTPluginContext context, Builder builder);
interface Builder {
/**
* 设置本地化文本实例,设置之后后续方法的title、
* summary、name均可通过{key}格式使用本地化文本。
*/
void setLocalString(LocalString localString);
/**
* 添加选项头
*
* @param title 标题
*/
void addHeader(@NonNull String title);
/**
* 添加一个纯文本
* @param title 标题
* @return Text实例,可进行后续配置
*/
Text addText(@NonNull String title);
/**
* 添加一个输入选项,选项值类型为String
*
* @param title 标题
* @param key 存储选项值的key
* @return Input实例,可进行后续配置
*/
Input addInput(@NonNull String title, @NonNull String key);
/**
* 添加一个开关,选项值类型为boolean
*
* @param title 标题
* @param key 存储选项值的key
* @return Switch实例,可进行后续配置
*/
Switch addSwitch(@NonNull String title, @NonNull String key);
/**
* 添加一个开关,选项值类型为String
*
* @param title 标题
* @param key 存储选项值的key
* @return List实例,可进行后续配置
*/
List addList(@NonNull String title, @NonNull String key);
}
/**
* 选项-纯文本
*/
interface Text {
/**
* 设置摘要,显示在标题下方
*/
Text summary(String summary);
/**
* 设置点击后调整的url,不设置则点击后无效果
*/
Text url(String url);
}
/**
* 选项-文本输入
*/
interface Input {
/**
* 设置默认值
*/
Input defaultValue(String defaultValue);
/**
* 设置摘要,显示在标题下方
*/
Input summary(String summary);
/**
* 使用输入值作为摘要,设置后会覆盖掉原有摘要
*/
Input valueAsSummary();
/**
* 设置文本输入类型
*
* @param inputType {@link android.text.InputType}
*/
Input inputType(int inputType);
/**
* 设置输入内容校验器,可用于检测输入内容格式是否正确
*/
Input validator(Validator validator);
/**
* 输入内容校验器
*/
interface Validator {
/**
* @param value 待校验内容
* @return 校验通过返回null,否则返回错误信息,支持本地化文本{key}格式
*/
@Nullable
String validate(String value);
}
}
/**
* 选项-开关
*/
interface Switch {
/**
* 设置默认值
*/
Switch defaultValue(boolean defaultValue);
/**
* 设置摘要,显示在标题下方
*/
Switch summary(String summary);
/**
* 设置选项状态为「开」时显示的摘要,会覆盖掉原有摘要
*/
Switch summaryOn(String summary);
/**
* 设置选项状态为「关」时显示的摘要,会覆盖掉原有摘要
*/
Switch summaryOff(String summary);
}
/**
* 选项-单选列表
*/
interface List {
/**
* 设置默认值
*/
List defaultValue(String defaultValue);
/**
* 设置摘要,显示在标题下方
*/
List summary(String summary);
/**
* 添加子选项
*
* @param name 子选项名称
* @param value 子选项值
* @return Item实例,可进行后续配置
*/
Item addItem(@NonNull String name, String value);
/**
* 选项-单选列表-子选项
*/
interface Item {
/**
* 设置该子选项被选中后显示的摘要,会覆盖掉原有摘要
*/
Item summary(String summary);
/**
* 添加下一个子选项
*
* @param name 子选项名称
* @param value 子选项值
* @return 下一个Item实例,可进行后续配置
*/
Item addItem(@NonNull String name, String value);
}
}
}