按键精灵安卓版浮窗消失(按键精灵安卓版)
按键精灵安卓版浮窗消失(按键精灵安卓版)Dim arr=array("点赞" "留言" "评论" "私信" "回复") Dim key="留言" For i = 0 To UBOUND(arr) If instr(1 arr(i) key)>0 Then TracePrint "第"&i 1&"位置找到" Exit for End If If i = UBOUND(arr) Then TracePrint "没有找到" End If Next第三步思考:搜索可能不止有一个满足条件的选项,那这种情况,我们在平时都是点一下按钮,往后搜索一个,直到搜索完。Dim arr=array("点赞" "留言" "
大家好,我是公众号3分钟学堂郭立员,前两天在群里看到这么一个问题感觉挺有意思的,拿出来和大家分享一下,问题是这样的,看下图:
下拉框里面有100多个选项,一个个去找想点的选项很麻烦,想做个搜索功能
我在看到这个问题的时候,第一感觉是不难,而后一想又发现有些难度。
先来看看做好的效果:(源码在文章最底部)
下面我来说一下我的思路过程:思考过程可能会有些绕,如果有“懵逼”情况,请多看几遍。
第一步思考:先完成从多个内容中搜索某一个的功能。
假设把所有内容都放入数组中,然后通过循环遍历所有内容,之后逐一比对,确定第几个是我们要搜索的内容。
Dim arr=array("点赞" "留言" "评论" "私信" "回复")
Dim key="留言"
For i = 0 To UBOUND(arr)
If arr(i) = key Then
TracePrint "第"&i 1&"位置找到"
Exit for
End If
If i = UBOUND(arr) Then
TracePrint "没有找到"
End If
Next
第二步思考,优化一下判断部分,第一步中的搜索是精准匹配,我们通常的搜索都是模糊匹配,判断条件使用查找命令代替等于即可,优化后是这样的。
Dim arr=array("点赞" "留言" "评论" "私信" "回复")
Dim key="留言"
For i = 0 To UBOUND(arr)
If instr(1 arr(i) key)>0 Then
TracePrint "第"&i 1&"位置找到"
Exit for
End If
If i = UBOUND(arr) Then
TracePrint "没有找到"
End If
Next
第三步思考:搜索可能不止有一个满足条件的选项,那这种情况,我们在平时都是点一下按钮,往后搜索一个,直到搜索完。
这步的难点是每一次运行(点击)之间是有联系的,第2运行的搜索起始位置,是第1次运行的结束位置,第3次是从第2次结束位置开始,以此类推……
一模一样的代码,每次点运行却有不同的结果,是不是有点头疼了。
每次运行的不同点在哪里?
起始位置!!!
那么我们把这个位置信息用一个东西存储起来。存东西第一个想到是啥?
变量,这里明显不行,只要重新运行代码,变量就会重置。
什么存储不会重置,配置文件对吧,那么我们用一个文本当做配置文件。
Dim arr=array("点赞" "留言" "评论" "私信" "回复" "文章留言")
Dim key="留言"
Dim number=file.read("/sdcard/pictures/config.txt")
For i = number To UBOUND(arr)
If instr(1 arr(i) key)>0 Then
TracePrint "第"&i 1&"位置找到"
file.Write ("/sdcard/pictures/config.txt" i 1)
Exit for
End If
If i = UBOUND(arr) Then
TracePrint "没有找到"
End If
Next
把文本记录加入进去了,每次获得的位置结果 1,当做下一次的起始位置,+1的目的是为了上步结尾和下步开始错开一个查找位置。
这种写法,又出现bug了,就是如果搜索到的结果是数组的最后一个内容,那么就根本不进入循环。
for i=6 to 5
就像这种写法,当i的值大于了to后面的值,for循环根本不会执,因为超出了循环范围。
回到我说的bug,因为 1的存在,如果搜索结果i的位置是最后一个,那么 1以后就会超出范围了。
解决办法,给记录文本读取的内容单独加个判断,如果已经大于数组里面内容的个数,那么直接输出查找完所有内容了,不用继续查了。
Dim arr=array("点赞" "留言" "评论" "私信" "文章留言" "回复")
Dim key="留言"
Dim number=file.read("/sdcard/pictures/config.txt")
If cint(number) > UBOUND(arr) Then
TracePrint "所有内容已经搜索完毕!"
End If
For i = number To UBOUND(arr)
If instr(1 arr(i) key)>0 Then
TracePrint "第"&i 1&"位置找到"
file.Write ("/sdcard/pictures/config.txt" i 1)
Exit for
End If
If i = UBOUND(arr) Then
TracePrint "所有内容已经搜索完毕!"
End If
Next
思考部分又来了,写到这一步,我又想到一个问题,记录文本咋清零?
清零我想到两种情况:
①搜索完毕了,直接把0写入达到记录文本
②更换搜索的关键词,这里就需要用一个文本记录关键词,搜索前查询关键词是否发生变化。
思考的差不多了,来解答最开始的问题:
下拉框里面有100多个选项,一个个去找想点的选项很麻烦,想做个搜索功能
分析一下:
打开脚本,把所有选项存入数组,按钮点一下,搜索一次,搜索到了就把选项在下拉框中显示。
这里面有个知识点,修改下拉框的初始选项的数字,就可以修改选项内容。
获取和修改界面元素的命令:
获取:uip.GetAttribute
修改:uip.SetAttribute
最后我们直接上代码了:
【界面元素代码】
界面1:
{
下拉框搜索:
{
水平布局:
{
输入框:
{
注释:"初始文本、文字大小、最大输入长度、高度、宽度是可选属性,如需使用默认值,可保持值为0或直接删除此属性"
名称:"输入框1"
提示内容:" "
初始文本:""
仅输入数字:false
文字大小:0
最大输入长度:0
高度:0
宽度:0
}
按钮:
{
注释:"文字大小、高度、宽度是可选属性,如需使用默认值,可保持值为0或直接删除此属性"
名称:"按钮1"
显示内容:"搜索"
点击响应:"函数名1"
文字大小:0
高度:0
宽度:0
}
}
下拉框:
{
注释:"初始选项是可选属性,默认值为0。模版中设置了三个选项,您可以根据需要增加或减少,注意各选项之间用逗号分隔。"
名称:"下拉框1"
选择响应:"函数名2"
选项:
[
"点赞"
"留言"
"评论"
"私信"
"文章留言"
"回复"
]
初始选项:0
}
}
}
【界面函数代码】
Function 函数名1()
Dim key=uip.GetAttribute("输入框1")
Dim keyword=file.read("/sdcard/pictures/keyword.txt")
If Len(keyword) = 0 Then
file.write("/sdcard/pictures/keyword.txt" "")
End If
If keyword <> key["初始文本"] Then
file.Write ("/sdcard/pictures/config.txt" 0)
End If
Dim m=uip.GetAttribute("下拉框1")
Dim arr=m["选项"]
Dim number=file.read("/sdcard/pictures/config.txt")
If cint(number) > UBOUND(arr) Then
ShowMessage "所有内容已经搜索完毕!"
file.Write ("/sdcard/pictures/config.txt" 0)
End If
For i = number To UBOUND(arr)
If InStr(1 arr(i) key["初始文本"]) > 0 Then
file.Write "/sdcard/pictures/config.txt" i 1
file.write("/sdcard/pictures/keyword.txt" key["初始文本"])
ShowMessage "第" & i 1 & "位置找到["&key["初始文本"]&"]"
uip.SetAttribute("下拉框1" {"初始选项":i})
Exit for
End If
If i = UBOUND(arr) Then
ShowMessage "所有内容已经搜索完毕!"
file.Write ("/sdcard/pictures/config.txt" 0)
End If
Next
EndFunction
今天分享的内容就这些了,大家可以去试试了,如果觉得本期文章还行,记得点赞、分享、留言。