有沒有辦法在我的應用程序中捕獲粘貼事件?當我點擊一個editText並選擇Paste from context菜單時,我必須做點什麼。由於android paste事件
7
A
回答
4
創建位置 '粘貼'
註冊的ContextMenu您的EditText menu.xml文件
EditText et=(EditText)findViewById(R.id.et);
registerForContextMenu(et);
創建文本菜單
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
menu.setHeaderTitle("title");
}
創建方法菜單的onClick
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo)item.getMenuInfo();
switch (item.getItemId()) {
case R.id.paste:
break;
}
return true;
}
5
您應該在接收粘貼操作的控件上實現一個TextWatcher偵聽器。
TextWatcher類提供了處理任何可編輯的OnChange,BeforeChange和AfterChange的方法。例如:
private void pasteEventHandler() {
((EditText)findViewById(R.id.txtOutput))
.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
Log.d(TAG, "Text changed, refreshing view.");
refreshView();
}
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
public void onTextChanged(CharSequence s, int start,
int before, int count) {
}
});
}
+2
只是一個迂腐的評論:鑄造到一個TextView就足夠了。 –
0
下面是代碼,您可以覆蓋動作條複製/粘貼等
public class MainActivity extends Activity {
EditText editText;
private ClipboardManager myClipboard;
private ClipData myClip;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myClipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
editText = (EditText) findViewById(R.id.editText3);
myClipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
editText = (EditText) findViewById(R.id.editText3);
editText.setCustomSelectionActionModeCallback(new Callback() {
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
// TODO Auto-generated method stub
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case android.R.id.copy:
int min = 0;
int max = editText.getText().length();
if (editText.isFocused()) {
final int selStart = editText.getSelectionStart();
final int selEnd = editText.getSelectionEnd();
min = Math.max(0, Math.min(selStart, selEnd));
max = Math.max(0, Math.max(selStart, selEnd));
}
// Perform your definition lookup with the selected text
final CharSequence selectedText = editText.getText()
.subSequence(min, max);
String text = selectedText.toString();
myClip = ClipData.newPlainText("text", text);
myClipboard.setPrimaryClip(myClip);
Toast.makeText(getApplicationContext(), "Text Copied",
Toast.LENGTH_SHORT).show();
// Finish and close the ActionMode
mode.finish();
return true;
case android.R.id.cut:
// add your custom code to get cut functionality according
// to your requirement
return true;
case android.R.id.paste:
// add your custom code to get paste functionality according
// to your requirement
return true;
default:
break;
}
return false;
}
});
}
}
0
您可以設置監聽器類:
public interface GoEditTextListener {
void onUpdate();
}
Сreate自我EditText類:
public class GoEditText extends EditText
{
ArrayList<GoEditTextListener> listeners;
public GoEditText(Context context)
{
super(context);
listeners = new ArrayList<>();
}
public GoEditText(Context context, AttributeSet attrs)
{
super(context, attrs);
listeners = new ArrayList<>();
}
public GoEditText(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
listeners = new ArrayList<>();
}
public void addListener(GoEditTextListener listener) {
try {
listeners.add(listener);
} catch (NullPointerException e) {
e.printStackTrace();
}
}
/**
* Here you can catch paste, copy and cut events
*/
@Override
public boolean onTextContextMenuItem(int id) {
boolean consumed = super.onTextContextMenuItem(id);
switch (id){
case android.R.id.cut:
onTextCut();
break;
case android.R.id.paste:
onTextPaste();
break;
case android.R.id.copy:
onTextCopy();
}
return consumed;
}
public void onTextCut(){
}
public void onTextCopy(){
}
/**
* adding listener for Paste for example
*/
public void onTextPaste(){
for (GoEditTextListener listener : listeners) {
listener.onUpdate();
}
}
}
XML:
<com.yourname.project.GoEditText
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/editText1"/>
而在你的活動:
private GoEditText editText1;
editText1 = (GoEditText) findViewById(R.id.editText1);
editText1.addListener(new GoEditTextListener() {
@Override
public void onUpdate() {
//here do what you want when text Pasted
}
});
相關問題
- 1. Android Paste onClick
- 2. Paste/Collapse in R
- 3. wix MaskedEdit w/paste?
- 4. Python PIL Paste
- 5. XSLT -Cut and Paste
- 6. python-fu select copy paste
- 7. Sublime text paste joined multicursor
- 8. 我可以在CKEDITOR的Paste事件中使用多少剪貼板API?
- 9. 如何在GWT文本框中檢索PASTE(複製麪食)事件的值?
- 10. Paste vector to expression in x label
- 11. Excel Paste Special and Add Operation
- 12. Vim - Paste自動粘貼在
- 13. Android onclick事件?
- 14. Android onClose事件
- 15. Android「OnTouchRelease」事件?
- 16. 事件的Android
- 17. Android ScreenLock事件?
- 18. Android CalendarView事件
- 19. 如何截取Android中的全局PASTE?想要先處理它
- 20. 在數據幀的行上了解do.call()對'paste'和'function(x)paste(x)'的處理
- 21. COPY-PASTE是否傳輸所有子文件夾和文件?
- 22. Android中的greenrobot EventBus事件事件
- 23. Android關機事件
- 24. 鍵盤android事件?
- 25. Android佈局事件
- 26. Android事件處理
- 27. 手柄事件android
- 28. Android onAppLeave/onAppReturn事件
- 29. Android搖動事件
- 30. Android - 屏幕事件
我知道這個線程是老了,但不這樣用自己的上下文菜單替換內置的上下文菜單?如果你喜歡那個菜單,但只想在粘貼發生時收到通知,該怎麼辦? –
@ScottBiggs它也可以在不重新創建菜單的情況下工作。看到我的答案[這裏](http://stackoverflow.com/a/14981376/717341) –