安卓/ios开发辅助软件按键精灵小精灵实现简单的UI多配置管理

近期遇到有用户来问为啥助手调试的时候有UI多配置的功能,但是打包小精灵之后就没有了?打包出来的小精灵是没有附带多配置的功能的,得要自己用界面事件来实现

虽然实现并不复杂,但是对于新手来说可能会没啥头绪,所以写了个简单的范例以供新手参考

实现的功能如下:

1、配置的保存和加载

2、支持新增和删除配置

3、支持保存多个配置方案列表

效果图:

下面是ui界面代码

复制代码
界面1:
{
	脚本配置管理:
	{	
		水平布局:
		{
			文字框:
			{
				名称:"文字框1",
				显示内容:"当前配置:",
				文字大小:0,
				高度:0,
				宽度:0,
				注释:"文字大小、高度、宽度是可选属性,如需使用默认值,可保持值为0或直接删除此属性"
			},	
			下拉框:
			{
				名称:"配置方案",
				选择响应:"函数名1",
				选项:["配置一","配置二"],
				初始选项:0,
				注释:"初始选项是可选属性,默认值为0。模版中设置了三个选项,您可以根据需要增加或减少,注意各选项之间用逗号分隔。"
			},	
			按钮:
			{
				名称:"按钮2",
				显示内容:"加载配置列表",
				点击响应:"LoadConfigList",
				文字大小:0,
				高度:0,
				宽度:0,
				注释:"文字大小、高度、宽度是可选属性,如需使用默认值,可保持值为0或直接删除此属性"
			},	
		},	
		水平布局:
		{
			按钮:
			{
				名称:"保存配置",
				显示内容:"保存配置",
				点击响应:"SaveConfig",
				文字大小:0,
				高度:0,
				宽度:0,
				注释:"文字大小、高度、宽度是可选属性,如需使用默认值,可保持值为0或直接删除此属性"
			},	
			按钮:
			{
				名称:"加载配置",
				显示内容:"加载配置",
				点击响应:"LoadConfig",
				文字大小:0,
				高度:0,
				宽度:0,
				注释:"文字大小、高度、宽度是可选属性,如需使用默认值,可保持值为0或直接删除此属性"
			},
		},	
		水平布局:
		{	
			按钮:
			{
				名称:"添加配置",
				显示内容:"添加配置",
				点击响应:"AddConfig",
				文字大小:0,
				高度:0,
				宽度:0,
				注释:"文字大小、高度、宽度是可选属性,如需使用默认值,可保持值为0或直接删除此属性"
			},	
			按钮:
			{
				名称:"删除配置",
				显示内容:"删除配置",
				点击响应:"DelConfig",
				文字大小:0,
				高度:0,
				宽度:0,
				注释:"文字大小、高度、宽度是可选属性,如需使用默认值,可保持值为0或直接删除此属性"
			},	
		},	
		文字框:
		{
			名称:"文字框2",
			显示内容:"======================================",
			文字大小:0,
			高度:0,
			宽度:0,
			注释:"文字大小、高度、宽度是可选属性,如需使用默认值,可保持值为0或直接删除此属性"
		},	
		输入框:
		{
			名称:"输入框1",
			提示内容:"提示用户应该输入什么内容",
			初始文本:"",
			仅输入数字:false,
			密码:false,
			文字大小:0,
			最大输入长度:0,
			高度:0,
			宽度:0,
			注释:"初始文本、文字大小、最大输入长度、高度、宽度是可选属性,如需使用默认值,可保持值为0或直接删除此属性"
		},	
		多选框:
		{
			名称:"多选框1",
			提示内容:"提示用户的文字内容",
			点击响应:"函数名1",
			选中:false,
			文字大小:0,
			高度:0,
			宽度:0,
			注释:"文字大小、高度、宽度是可选属性,如需使用默认值,可保持值为0或直接删除此属性"
		},	
		下拉框:
		{
			名称:"下拉框2",
			选择响应:"函数名1",
			选项:["选项1","选项2","选项3"],
			初始选项:0,
			注释:"初始选项是可选属性,默认值为0。模版中设置了三个选项,您可以根据需要增加或减少,注意各选项之间用逗号分隔。"
		},	
	
	},	

}


// 获取当前使用的配置名
Function GetCurrentConfig()
	Dim CurrentConfig = UIP.GetAttribute("配置方案")
	Dim ConfigName = CurrentConfig["选项"][CurrentConfig["初始选项"] + 1]
	GetCurrentConfig = ConfigName
End Function

// 删除数组元素
Function DelArray(t, idx)
	Dim temp = {null}
	For i = 1 To Len(t)
		If i <> idx Then 
			temp[Len(temp) + 1] = t[i]
		End If
	Next
	DelArray = temp
End Function

// 加载配置方案列表
Function LoadConfigList()
	Dim Config = {null}
	Dim CurrentConfig = UIP.GetAttribute("配置方案")
	Dim ConfigPath = GetSdcardDir() & "/UI_Config.json"
	If Dir.Exist(ConfigPath) = 1 Then 
		Config = Encode.JsonToTable(File.Read(ConfigPath))
		UIP.SetAttribute("配置方案", {"选项": Config["配置方案列表"]})
	End If
End Function

// 添加配置方案
Function AddConfig()
	Dim ConfigName = Dialog.InputBox("输入新配置的名称")
	If ConfigName <> "" Then 
		Dim Config = {null}
		Dim ConfigPath = GetSdcardDir() & "/UI_Config.json"
		If Dir.Exist(ConfigPath) = 1 Then 
			Config = Encode.JsonToTable(File.Read(ConfigPath))
		End If
		// 在控件上添加新的方案名称,并保存到配置文件中
		Dim CurrentConfig = UIP.GetAttribute("配置方案")
		CurrentConfig["选项"][Len(CurrentConfig["选项"]) + 1] = ConfigName
		CurrentConfig["初始选项"] = Len(CurrentConfig["选项"]) - 1
		UIP.SetAttribute "配置方案", CurrentConfig
		
		Config["配置方案列表"] = CurrentConfig["选项"]
		Call File.Write(ConfigPath, Encode.TableToJson(Config))
	End If
End Function

// 删除配置方案
Function DelConfig()
	Dim Config = {null}
	Dim ConfigPath = GetSdcardDir() & "/UI_Config.json"
	If Dir.Exist(ConfigPath) = 1 Then 
		Config = Encode.JsonToTable(File.Read(ConfigPath))
		Dim ConfigName = GetCurrentConfig()
		If Config["配置方案列表"] Then 
			// 遍历方案列表,删除当前名称的方案
			For i = 1 To Len(Config["配置方案列表"])
				If Config["配置方案列表"][i] = ConfigName Then 
					Config["配置方案列表"] = DelArray(Config["配置方案列表"], i)
					Exit For
				End If
			Next
		End If
		// 删除对应方案的配置信息,并保存到文件中
		If Config["ConfigName"] Then 
			Config["ConfigName"] = null
		End If
		Call File.Write(ConfigPath, Encode.TableToJson(Config))
		Call LoadConfigList()
	End If
	
End Function

// 保存控件
Function SaveConfig()
	Dim Config = {null}
	Dim ConfigPath = GetSdcardDir() & "/UI_Config.json"
	If Dir.Exist(ConfigPath) = 1 Then 
		Config = Encode.JsonToTable(File.Read(ConfigPath))
	End If
	
	Dim ConfigName = GetCurrentConfig()
	// 添加控件信息到TempConfig键值表中
	Dim TempConfig = {null}
	TempConfig["输入框1"] = UIP.GetAttribute("输入框1")
	TempConfig["多选框1"] = UIP.GetAttribute("多选框1")
	TempConfig["下拉框2"] = UIP.GetAttribute("下拉框2")
	// 把当前界面的控件信息存入对应方案名称的配置键值表中并保存到文件
	Config[ConfigName] = TempConfig
	
	Call File.Write(ConfigPath, Encode.TableToJson(Config))
	
End Function

// 加载控件
Function LoadConfig()
	Dim Config = {null}
	Dim ConfigPath = GetSdcardDir() & "/UI_Config.json"
	If Dir.Exist(ConfigPath) = 1 Then 
		Config = Encode.JsonToTable(File.Read(ConfigPath))
	End If
	
	Dim ConfigName = GetCurrentConfig()
	If Config[ConfigName] Then 
		Dim TempConfig = Config[ConfigName]
		// 加载控件配置
		UIP.SetAttribute("输入框1", TempConfig["输入框1"])
		UIP.SetAttribute("多选框1", TempConfig["多选框1"])
		UIP.SetAttribute("下拉框2", TempConfig["下拉框2"])
	End If
End Function
相关推荐
WA内核拾荒者8 小时前
WhatsApp 账号异常检测的自动化告警系统设计
数据库·python·自动化
派葛穆9 小时前
Unity-UI 输入框功能
ui·unity·游戏引擎
FORCECON111 小时前
力控SCADA驱动 :告别传统寻址,EIP协议全新适配升级
自动化·驱动·scada·监控组态软件·采集监控平台
solo_9911 小时前
用 LSPosed 模拟录屏音频编码器卡顿:从思路到落地
android
zzq779712 小时前
别把大模型 API Key 写进 APK:移动 AI 应用接口防盗刷实践
android·人工智能·安全·app加固·御盾安全·安卓加固
xiaopang14 小时前
RK3568 AOSP 编译与快速部署实战
android
attitude.x14 小时前
Cursor+GitOps:自动化运维新姿势
运维·自动化
2501_9159214314 小时前
iOS开发环境搭建详解 Xcode 配置与快蝎轻量级工具选择
ide·vscode·macos·ios·个人开发·xcode·敏捷流程
程序员正茂14 小时前
Android工程中使用ncnn进行yolo识别
android·yolo·ncnn