安卓/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
相关推荐
Digitally2 小时前
如何从 iPhone 中永久删除联系人
ios·iphone
码农xo2 小时前
android 设备实时传输相机采集的视频到电脑pc端 通过内网wifi 方案
android·数码相机·音视频
常利兵2 小时前
解锁Android的隐藏超链接:Deep Link与App Link探秘
android·gitee
for_syq2 小时前
trace抓取工具
android·python
sheepfagdng2 小时前
Python-web自动化-selenium(2)
运维·selenium·自动化
黄林晴2 小时前
Compose Multiplatform 1.10 发布:统一 Preview、Navigation 3、Hot Reload 三箭齐发
android·flutter
库奇噜啦呼2 小时前
【iOS】Effective Objective-C第三章
ios·objective-c·cocoa
小周学学学2 小时前
vmware的python自动化:批量迁移虚拟机
运维·自动化·vmware·虚拟化
Kapaseker2 小时前
一杯 Kotlin 美式品味 object 声明
android·kotlin