安卓/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
相关推荐
ccice012 分钟前
硬核实战:调用Gemini多模态管道,直击办公中的图表解析、发票识别与自动化脚本生成(国内镜像免费方案)
运维·自动化
大貔貅喝啤酒16 分钟前
基于Windows下载安装Android Studio 3.3.2版本教程(2026详细图文版)
android·java·windows·android studio
程序员码歌18 分钟前
OpenSpec 到 Superpowers:AI 编码从说清到做对
android·前端·人工智能
2501_9151063225 分钟前
深入解析无源码iOS加固原理与方案,保护应用安全
android·安全·ios·小程序·uni-app·cocoa·iphone
国冶机电安装1 小时前
PLC控制柜制造:从电气设计到自动化稳定运行的完整解析
自动化
云飞云共享云桌面2 小时前
硬件采购省50%、设计效率提40%——通过云飞云共享云桌面一台云主机拖10人的真实跑法
运维·服务器·网络·人工智能·自动化
Daniel_Coder2 小时前
iOS Widget 开发-15:Widget 性能优化指南
ios·swift·widget·widgetcenter
UCloud_TShare2 小时前
告警至处置的自动化鸿沟:AI Agent 的破局思路探索
运维·人工智能·自动化
Maydaycxc2 小时前
跨境电商多账号自动化:RPA对接指纹浏览器与OCR识图实战
自动化·ocr·rpa
ZC跨境爬虫3 小时前
跟着 MDN 学CSS day_2:(连接样式表与选择器的实战艺术)
java·前端·css·ui·html·媒体