Android辅助功能服务 - 清除EditText

时间:2014-09-10 22:23:37

标签: android

我正在尝试使用android的AccessibilityService在EditText中插入文本。 目前,我正在做类似的事情:

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

我的问题是,如果EditText中存在一些文本,则会将新文本附加到其中,而我希望将其替换。我找不到任何方法来清除辅助功能服务中EditText内的文字。

我觉得好像错过了什么,因为这应该是一件容易的事。 请告诉我如何做到这一点。

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

用这个,希望可以帮到你

Bundle arguments = new Bundle();   

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

nodeInfo.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, arguments);

答案 2 :(得分:-1)

只需在EditText上调用setText并在执行粘贴之前传入一个空字符 - http://developer.android.com/reference/android/widget/EditText.html

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