全局通栏广告

爱盲论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 1645|回复: 19
打印 上一主题 下一主题

通过解说的代码,实现天坦输入法半屏模式变得更好用

[复制链接]

17

主题

91

帖子

607

积分

中级会员

Rank: 3Rank: 3

积分
607
跳转到指定楼层
楼主
发表于 2022-9-12 13:31:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
楼主 心灵亮光说:
本帖最后由 心灵亮光 于 2022-9-17 01:06 编辑

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

本楼来自 天坦百宝箱
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

17

主题

91

帖子

607

积分

中级会员

Rank: 3Rank: 3

积分
607
沙发
 楼主| 发表于 2022-9-12 13:32:42 | 只看该作者
沙发 心灵亮光说:
本帖最后由 心灵亮光 于 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
本楼来自 天坦百宝箱
回复 支持 反对

使用道具 举报

17

主题

91

帖子

607

积分

中级会员

Rank: 3Rank: 3

积分
607
板凳
 楼主| 发表于 2022-9-12 13:33:41 | 只看该作者
板凳 心灵亮光说:
本帖最后由 心灵亮光 于 2022-10-12 10:47 编辑

3.无候选下滑手势的功能
上面提到无候选下滑可以朗读编辑框,那如果不想朗读,想实现其他例如收起键盘、发送等功能,下面以收起键盘为例,实现其他功能可修改关键字。
下面是代码:
if service.isShowInputWindow() then
service.execute("返回",node)
return true
end
本楼来自 天坦百宝箱
回复 支持 反对

使用道具 举报

17

主题

91

帖子

607

积分

中级会员

Rank: 3Rank: 3

积分
607
地板
 楼主| 发表于 2022-9-12 13:34:35 | 只看该作者
地板 心灵亮光说:
本帖最后由 心灵亮光 于 2022-10-12 10:48 编辑

4.发送和评论等功能
全屏可以通过手势点击发送评论等按钮,半屏可以通过下面代码实现,双引号里面的关键字可以自行增加,关键字与关键字之间要有竖线隔开。
下面是代码:
if service.isShowInputWindow() then
service.click({{"发送|确定|保存|发表|评论|完成|发布|搜索"}})
return true
end
本楼来自 天坦百宝箱
回复 支持 反对

使用道具 举报

17

主题

91

帖子

607

积分

中级会员

Rank: 3Rank: 3

积分
607
5#
 楼主| 发表于 2022-9-12 13:35:43 | 只看该作者
5楼 心灵亮光说:
本帖最后由 心灵亮光 于 2022-10-12 10:49 编辑

5.判断键盘专用功能
例如有键盘实现清空,没有键盘或者焦点在其他地方实现复制。下面这个代码可以自行修改双引号里面的关键字,前面双引号关键字是弹出键盘用的,后面双引号是其他地方用的。
下面是代码:
if service.isShowInputWindow() then
service.execute("清空",node)
return true
end
service.execute("复制",node)
return true
本楼来自 天坦百宝箱
回复 支持 反对

使用道具 举报

17

主题

91

帖子

607

积分

中级会员

Rank: 3Rank: 3

积分
607
6#
 楼主| 发表于 2022-9-12 13:36:33 | 只看该作者
6楼 心灵亮光说:
6.编辑模式
解说用户默认手势先左后下打开编辑模式,如果这个手势用的是默认,无需修改。选择左右手势移动焦点的,打开编辑模式后。用手势。上下滑上个字和下个字,左右滑上下行,先左后上上一段落,先右后下下一段落,先上后下开头,先下后上结尾,先上后右选择开始点,单击读取所选内容。先下后右选择终点并复制,先上后左追加复制,先左后下退出编辑模式。
如果其他地方不想用默认手势的可以通过代码修改(其他地方指的是焦点不在编辑框),下面介绍其他地方是返回主屏幕,焦点在编辑框就打开编辑模式注,由于编辑模式手势用的是解说在编辑框默认的功能,所以手势不能更改。
下面是代码:

if service.check("编辑框",node) return false
end
service.execute("主屏幕",node)
return true
本楼来自 天坦百宝箱
回复 支持 反对

使用道具 举报

17

主题

91

帖子

607

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

17

主题

91

帖子

607

积分

中级会员

Rank: 3Rank: 3

积分
607
8#
 楼主| 发表于 2022-9-12 13:37:47 | 只看该作者
8楼 心灵亮光说:
本帖最后由 心灵亮光 于 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
本楼来自 天坦百宝箱
回复 支持 反对

使用道具 举报

17

主题

91

帖子

607

积分

中级会员

Rank: 3Rank: 3

积分
607
9#
 楼主| 发表于 2022-9-12 13:41:35 | 只看该作者
9楼 心灵亮光说:
特别感谢圣杰提供的代码
本楼来自 天坦百宝箱
回复 支持 反对

使用道具 举报

148

主题

5483

帖子

1万

积分

金牌会员

Rank: 5Rank: 5

积分
13940
10#
发表于 2022-9-12 15:03:17 | 只看该作者
10楼 永燃之火说:
我觉得半屏的震动有点硌手,所以就没有用。
本帖来自安卓秘书
回复 支持 反对

使用道具 举报

8

主题

35

帖子

354

积分

注册会员

Rank: 2

积分
354
11#
发表于 2022-9-12 15:43:31 来自手机 | 只看该作者
11楼 行千里路说:
技术贴,值得收藏

一千年后
回复 支持 反对

使用道具 举报

84

主题

1717

帖子

6400

积分

金牌会员

咸鱼

Rank: 5Rank: 5

积分
6400
QQ
12#
发表于 2022-9-12 17:21:43 | 只看该作者
12楼 江静月说:
感谢分享。
回复

使用道具 举报

717

主题

1万

帖子

3万

积分

核心会员

Rank: 6Rank: 6

积分
36779
13#
发表于 2022-9-12 17:30:29 来自手机 | 只看该作者
13楼 风中漫步说:
感谢分享

,来自论坛助手
回复 支持 反对

使用道具 举报

90

主题

926

帖子

4331

积分

高级会员

Rank: 4

积分
4331
14#
发表于 2022-9-12 21:18:01 | 只看该作者
14楼 糖糖说:
感谢分享。
本帖来自安卓秘书
回复 支持 反对

使用道具 举报

17

主题

91

帖子

607

积分

中级会员

Rank: 3Rank: 3

积分
607
15#
 楼主| 发表于 2022-9-13 20:15:43 | 只看该作者
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




本楼来自 天坦百宝箱
回复 支持 反对

使用道具 举报

17

主题

91

帖子

607

积分

中级会员

Rank: 3Rank: 3

积分
607
16#
 楼主| 发表于 2022-10-12 10:49:53 | 只看该作者
16楼 心灵亮光说:
改了一下代码的判断机制,现在是判断键盘有没有弹出。弹出键盘执行输入需要的功能。收起键盘就执行读屏的全局功能。包括复制、粘贴、清空,弹出剪切板,点击发送评论等,读编辑框内容,解释编辑框中的字符,统计字符,查询字典,编辑模式,语音输入(需掉用读屏里接口),光标移到开头结尾等等。
本楼来自 天坦百宝箱
回复 支持 反对

使用道具 举报

90

主题

1442

帖子

5289

积分

金牌会员

Rank: 5Rank: 5

积分
5289
17#
发表于 2022-10-14 07:02:24 | 只看该作者
17楼 斩杀天才说:
这个好
本楼来自 掌中世界安卓版
回复 支持 反对

使用道具 举报

17

主题

91

帖子

607

积分

中级会员

Rank: 3Rank: 3

积分
607
18#
 楼主| 发表于 2023-3-14 15:23:39 | 只看该作者
18楼 心灵亮光说:
本帖最后由 心灵亮光 于 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
本楼来自 天坦百宝箱
回复 支持 反对

使用道具 举报

17

主题

91

帖子

607

积分

中级会员

Rank: 3Rank: 3

积分
607
19#
 楼主| 发表于 2023-3-14 15:24:15 | 只看该作者
19楼 心灵亮光说:
本帖最后由 心灵亮光 于 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
本楼来自 天坦百宝箱
回复 支持 反对

使用道具 举报

17

主题

91

帖子

607

积分

中级会员

Rank: 3Rank: 3

积分
607
20#
 楼主| 发表于 2023-3-14 15:24:46 | 只看该作者
20楼 心灵亮光说:
本帖最后由 心灵亮光 于 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
本楼来自 天坦百宝箱
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋| 爱盲论坛  

GMT+8, 2024-4-29 03:23 , Processed in 0.295315 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表