我使用AccessibilityEvent.getSource()获取TextView.Can我做了一些事情来改变TextView的文本?

时间:2017-04-03 13:16:24

标签: android accessibilityservice

这是我的代码。在我的自定义AccessibilityService中,我通过方法TextView得到所有onAccessibilityEvent。然后我想标记文字。

public void onAccessibilityEvent(AccessibilityEvent event) {

    AccessibilityNodeInfo source = event.getSource();
        if (source == null) {
            return;
        }

    for (int i = 0; i < source.getChildCount(); i++) {
         AccessibilityNodeInfo node = source.getChild(i);
         if (TEXTVIEW.equals(node.getClassName())) {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
          Bundle arguments = new Bundle();
                    arguments.putCharSequence(AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE,
                            node.getText().toString()+1);//just want to mark
                    node.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, arguments);
                }

            }
        }

    }

1 个答案:

答案 0 :(得分:0)

这段代码对我来说很好用!

public void onAccessibilityEvent(AccessibilityEvent e) {

    if (e.getSource() == null) return;

    if (e.getSource().getClassName().equals(EditText.class.getName())) {

        Bundle arguments = new Bundle();
        arguments.putCharSequence(AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE,
                "android");
        e.getSource().performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, arguments);

    } 
}

并愉快地放置文本&#34; android&#34;进入可编辑的文本容器! AH,现在,如果你想改变TextView的文本,现在,尝试这样做是违法的。 TextView的文本是只读属性。你无法编辑它。可访问性节点信息是呈现视图的可访问性服务表示。您无法要求应用程序更改TextView的文本。这具有很大的安全隐患。哦,所以你有一个服务告诉大家密码字段是用户名字段,反之亦然?这不方便吗?基本上,您只能编辑可编辑的视图文本。

话虽如此,当您提供反馈时,您可以告诉用户该文本是您想要告诉他们的内容。并不是说我会使用一种可以提供服务的无障碍服务&#34; kitten&#34;对于层次结构中的每个视图...但是,您的用例/您想要完成的内容尚不清楚。如果你要提出另一个问题,那么这就是我要完成的事情......&#34;而不是&#34;这是我尝试过的,为什么它不起作用?&#34;我很乐意帮忙。