爱盲论坛

标题: 通过解说的代码,实现天坦输入法半屏模式变得更好用 [打印本页]

作者: 心灵亮光    时间: 2022-9-12 13:31
标题: 通过解说的代码,实现天坦输入法半屏模式变得更好用
本帖最后由 心灵亮光 于 2022-9-17 01:06 编辑

半屏输入最大的好处。就是可以触摸上半屏的内容。还有可以用读屏的手势。解说用户已经支持了单指半屏可以滑动选字,没有候选可以逐字移动光标。下面就介绍几个方法。利用读屏的功能。让输入更好用。
1.大家都知道,输入法全屏可以用手势滑动到结尾就可以朗读编辑框的内容,半屏是不是就只能触摸编辑框了?下面介绍两种可以在半屏输入法朗读编辑框文字的方法。
第一种点击工具栏的编辑,点击朗读编辑框内容。
第二种,解说用户可以通过代码实现手势朗读编辑框内容。
把下面代码复制。打开程序设置。点击操作设置。点击手势方案。右上角点击更多。新建功能。名称可以随便填。内容把刚复制的代码粘贴进去。
下面是代码:
local edit=service.getEditText()
if edit then
service.speak(edit.Text or "")
else
service.speak("没输入框")
end

本楼来自 天坦百宝箱
作者: 心灵亮光    时间: 2022-9-12 13:32
本帖最后由 心灵亮光 于 2022-10-12 10:47 编辑

2.解说用户输入法半屏可以通过下滑上屏功能那么,没候选的时候能朗读编辑框内容不就更加方便吗。其实在之前的代码加上判断键盘代码就可以了。
下面是代码:
if service.isShowInputWindow() then
local edit=service.getEditText()
if edit then
service.speak(edit.Text or "")
end
return true
end
本楼来自 天坦百宝箱
作者: 心灵亮光    时间: 2022-9-12 13:33
本帖最后由 心灵亮光 于 2022-10-12 10:47 编辑

3.无候选下滑手势的功能
上面提到无候选下滑可以朗读编辑框,那如果不想朗读,想实现其他例如收起键盘、发送等功能,下面以收起键盘为例,实现其他功能可修改关键字。
下面是代码:
if service.isShowInputWindow() then
service.execute("返回",node)
return true
end
本楼来自 天坦百宝箱
作者: 心灵亮光    时间: 2022-9-12 13:34
本帖最后由 心灵亮光 于 2022-10-12 10:48 编辑

4.发送和评论等功能
全屏可以通过手势点击发送评论等按钮,半屏可以通过下面代码实现,双引号里面的关键字可以自行增加,关键字与关键字之间要有竖线隔开。
下面是代码:
if service.isShowInputWindow() then
service.click({{"发送|确定|保存|发表|评论|完成|发布|搜索"}})
return true
end
本楼来自 天坦百宝箱
作者: 心灵亮光    时间: 2022-9-12 13:35
本帖最后由 心灵亮光 于 2022-10-12 10:49 编辑

5.判断键盘专用功能
例如有键盘实现清空,没有键盘或者焦点在其他地方实现复制。下面这个代码可以自行修改双引号里面的关键字,前面双引号关键字是弹出键盘用的,后面双引号是其他地方用的。
下面是代码:
if service.isShowInputWindow() then
service.execute("清空",node)
return true
end
service.execute("复制",node)
return true
本楼来自 天坦百宝箱
作者: 心灵亮光    时间: 2022-9-12 13:36
6.编辑模式
解说用户默认手势先左后下打开编辑模式,如果这个手势用的是默认,无需修改。选择左右手势移动焦点的,打开编辑模式后。用手势。上下滑上个字和下个字,左右滑上下行,先左后上上一段落,先右后下下一段落,先上后下开头,先下后上结尾,先上后右选择开始点,单击读取所选内容。先下后右选择终点并复制,先上后左追加复制,先左后下退出编辑模式。
如果其他地方不想用默认手势的可以通过代码修改(其他地方指的是焦点不在编辑框),下面介绍其他地方是返回主屏幕,焦点在编辑框就打开编辑模式注,由于编辑模式手势用的是解说在编辑框默认的功能,所以手势不能更改。
下面是代码:

if service.check("编辑框",node) return false
end
service.execute("主屏幕",node)
return true
本楼来自 天坦百宝箱
作者: 心灵亮光    时间: 2022-9-12 13:37
7.统计字符和解释编辑框中的文字
先左后右解释编辑框中的文字,先右后左统计字符并读出当前光标所在位置。
同样,这两个是调用解说在编辑框默认功能,手势不可更改,能更改是焦点不在编辑框功能,例如在编辑框是统计字符,其他地方列表浏览。可以自行修改关键字对应的功能。必须用先右后左手势调用,下面是代码:
if service.check("编辑框",node) return false
end
service.execute("列表浏览",node)
return true
本楼来自 天坦百宝箱
作者: 心灵亮光    时间: 2022-9-12 13:37
本帖最后由 心灵亮光 于 2023-3-15 15:52 编辑

8.删除光标所在句。
这个是按句删除。如果不想要这一句的内容,光标停留在这一句的任何一个字就能把这一句删除。
用什么符号可以自己加减,加减符号在代码在的第6行。
以下是代码。
if service.isShowInputWindow() then
local txt,s=node.text,""
local gb=node.getTextSelectionEnd()
local n1,n2=0,-1
if txt and txt~="" then
local tbl={",","。",":","?","!","……",";",",",".","!","?",";","\n","(",")"}
for n=gb-1,1,-1 do
if table.find(tbl,utf8.sub(txt,n,n)) then
n1=n
break
end
end
if gb<utf8.len(txt) then
for n=gb,utf8.len(txt)-1,1 do
if table.find(tbl,utf8.sub(txt,n,n)) then
n2=n
break
end
end
end
s=utf8.sub(txt,n1+1,n2)
txt=n2==-1 and utf8.sub(txt,1,n1) or utf8.sub(txt,1,n1)..utf8.sub(txt,n2+1,-1)
service.setText(node,txt)
service.setSelection(node,n1)
service.speak(s.."已删除")
else
service.speak("编辑框为空")
end
return true
end
本楼来自 天坦百宝箱
作者: 心灵亮光    时间: 2022-9-12 13:41
特别感谢圣杰提供的代码
本楼来自 天坦百宝箱
作者: 永燃之火    时间: 2022-9-12 15:03
我觉得半屏的震动有点硌手,所以就没有用。
本帖来自安卓秘书
作者: 行千里路    时间: 2022-9-12 15:43
技术贴,值得收藏

一千年后
作者: 江静月    时间: 2022-9-12 17:21
感谢分享。
作者: 风中漫步    时间: 2022-9-12 17:30
感谢分享

,来自论坛助手
作者: 糖糖    时间: 2022-9-12 21:18
感谢分享。
本帖来自安卓秘书
作者: 心灵亮光    时间: 2022-9-13 20:15
9.一字一顿朗读编辑框的内容。

上面解释编辑框的字符和朗读编辑框的内容都有了。下面分享一字一顿的朗读。由于解说读屏没有这个功能。下面还需要用到代码。感谢CoolsnowBye提供的代码。

下面是代码:

local text=service.getText(node)
local i=1
local t={}
while utf8.sub(text,i,i) and i<10000 do
table.insert(t,utf8.sub(text,i,i)..",")
i=i+1
end
service.speak(table.concat(t))
return true




本楼来自 天坦百宝箱
作者: 心灵亮光    时间: 2022-10-12 10:49
改了一下代码的判断机制,现在是判断键盘有没有弹出。弹出键盘执行输入需要的功能。收起键盘就执行读屏的全局功能。包括复制、粘贴、清空,弹出剪切板,点击发送评论等,读编辑框内容,解释编辑框中的字符,统计字符,查询字典,编辑模式,语音输入(需掉用读屏里接口),光标移到开头结尾等等。
本楼来自 天坦百宝箱
作者: 斩杀天才    时间: 2022-10-14 07:02
这个好
本楼来自 掌中世界安卓版
作者: 心灵亮光    时间: 2023-3-14 15:23
本帖最后由 心灵亮光 于 2023-3-15 15:39 编辑

9.删除光标所在段落
这个跟删除所在句是一样的,光标停留在这段落的任何一个字都能把这一段落删除。
以下是代码。
if node.isEditable() then
local txt,s=node.text,""
local gb=node.getTextSelectionEnd()
local n1,n2=0,-1
if txt and txt~="" then
local tbl={"\n"}
for n=gb-1,1,-1 do
if table.find(tbl,utf8.sub(txt,n,n)) then
n1=n
break
end
end
if gb<utf8.len(txt) then
for n=gb,utf8.len(txt)-1,1 do
if table.find(tbl,utf8.sub(txt,n,n)) then
n2=n
break
end
end
end
s=utf8.sub(txt,n1+1,n2)
txt=n2==-1 and utf8.sub(txt,1,n1) or utf8.sub(txt,1,n1)..utf8.sub(txt,n2+1,-1)
service.setText(node,txt)
service.setSelection(node,n1)
service.speak(s.."已删除")
else
service.speak("编辑框为空")
end
return true
end
本楼来自 天坦百宝箱
作者: 心灵亮光    时间: 2023-3-14 15:24
本帖最后由 心灵亮光 于 2023-3-15 15:35 编辑

10.删除光标前所有文字
这个是一键把光标前所有文字清除。是包含光标所在的这个字。
以下是代码
if node.isEditable()
local txt,s=node.text,""
local gb=node.getTextSelectionEnd()
if gb>0 then
s=utf8.sub(txt,gb+1,-1)
service.setText(node,s)
service.setSelection(node,0)
service.speak("光标前已删")
else
service.beep()
end
return true
end
本楼来自 天坦百宝箱
作者: 心灵亮光    时间: 2023-3-14 15:24
本帖最后由 心灵亮光 于 2023-3-15 15:31 编辑

11.删除光标后所有文字
这个跟前面的相反。删除光标后所有文字,不包括光标所在的字。
下面是代码。
if node.isEditable()
local txt,s=node.text,""
local gb=node.getTextSelectionEnd()
if gb<utf8.len(txt) and txt~="" then
s=utf8.sub(txt,1,gb)
service.setText(node,s)
  service.speak("光标后已删")
else
service.beep()
end
return true
end
本楼来自 天坦百宝箱




欢迎光临 爱盲论坛 (http://www.amhl.vip/) Powered by Discuz! X3.2