2014-09-10 628 views
2

我试图在Android的AccessibilityService中使用EditText插入文本。 目前,我做这样的事情:Android辅助功能服务 - 清除EditText

textnode.performAction(AccessibilityNodeInfo.ACTION_FOCUS); 
ClipData clip = ClipData.newPlainText("label", "DATA"); 
clipboard.setPrimaryClip(clip); 
textnode.performAction(AccessibilityNodeInfo.ACTION_PASTE); 

我的问题是,如果有一些目前EditText内的文本,新文本将被追加到它,而我希望它取代。我无法找到任何方式从无障碍服务中清除EditText中的文字。

我觉得我好像缺少了一些东西,因为这应该是一件容易的事。 请告诉我如何做到这一点。

回答

-1

只需拨打的setText上的EditText并传递一个空字符你做的糊之前 - http://developer.android.com/reference/android/widget/EditText.html

EditText editText = (EditText)findViewById(R.id.edit_text); 
editText.setText("", TextView.BufferType.EDITABLE); 
+0

我要从无障碍服务中做到这一点。编辑文本是一般的,就像它可以是任何应用程序中的任何编辑文本一样。我不认为我可以使用像这样的setText – rahules 2014-09-10 23:49:46

4

我不得不使用某种黑客。 基本上,它选择EditText中的文本,并将新文本粘贴在其上。 就我而言,我不得不更换一个字,所以我不得不选择的第一个字 下面的代码:

Bundle arguments = new Bundle(); 
arguments.putInt(AccessibilityNodeInfo.ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT, 
        AccessibilityNodeInfo.MOVEMENT_GRANULARITY_WORD); 
arguments.putBoolean(AccessibilityNodeInfo.ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN, 
        true); 
textnode.performAction(AccessibilityNodeInfo.ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY, 
        arguments); 
ClipData clip = ClipData.newPlainText("label", "NEWDATA"); 
clipboard.setPrimaryClip(clip); 
usernode.performAction(AccessibilityNodeInfo.ACTION_PASTE); 
0

利用这一点,希望能帮助你

Bundle arguments = new Bundle(); 

arguments.putCharSequence(
AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE, 
"your info"); 

nodeInfo.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, arguments); 
+1

你应该真的添加一些解释,为什么这个代码应该工作 - 你也可以在代码本身添加注释 - 目前的形式,它没有提供任何可以帮助的解释社区的其他人了解你做了什么来解决/回答问题。 – ishmaelMakitla 2016-08-10 09:58:49

+0

ACTION_SET_TEXT仅适用于API> = 21 – PsyGik 2016-08-10 12:26:50

+0

谢谢,但我在源中看到doc,不仅仅用于API> = 21, – yongzheng 2016-08-11 01:51:33