2014-09-10 627 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