在EditText中未显示Android默认的剪切/复制/粘贴选项可能是由于以下几个原因:
textIsSelectable
属性为true来实现:<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textIsSelectable="true" />
EditText editText = findViewById(R.id.editText);
registerForContextMenu(editText);
然后在Activity中重写onCreateContextMenu()
方法来创建上下文菜单:
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
getMenuInflater().inflate(R.menu.context_menu, menu);
}
在res/menu
目录下创建context_menu.xml
文件,并添加剪切/复制/粘贴选项:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/cut"
android:title="剪切" />
<item
android:id="@+id/copy"
android:title="复制" />
<item
android:id="@+id/paste"
android:title="粘贴" />
</menu>
最后,重写onContextItemSelected()
方法来处理选项的点击事件:
@Override
public boolean onContextItemSelected(MenuItem item) {
EditText editText = findViewById(R.id.editText);
switch (item.getItemId()) {
case R.id.cut:
editText.cut();
return true;
case R.id.copy:
editText.copy();
return true;
case R.id.paste:
editText.paste();
return true;
default:
return super.onContextItemSelected(item);
}
}
这样,当用户长按EditText时,上下文菜单将显示剪切/复制/粘贴选项。
EditText editText = findViewById(R.id.editText);
editText.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
getMenuInflater().inflate(R.menu.custom_selection_menu, menu);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
EditText editText = findViewById(R.id.editText);
int start = editText.getSelectionStart();
int end = editText.getSelectionEnd();
CharSequence selectedText = editText.getText().subSequence(start, end);
switch (item.getItemId()) {
case R.id.cut:
editText.getText().replace(start, end, "");
mode.finish();
return true;
case R.id.copy:
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("text", selectedText);
clipboard.setPrimaryClip(clip);
mode.finish();
return true;
case R.id.paste:
editText.getText().replace(start, end, clipboard.getPrimaryClip().getItemAt(0).getText());
mode.finish();
return true;
default:
return false;
}
}
@Override
public void onDestroyActionMode(ActionMode mode) {
}
});
在res/menu
目录下创建custom_selection_menu.xml
文件,并添加剪切/复制/粘贴选项:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/cut"
android:title="剪切" />
<item
android:id="@+id/copy"
android:title="复制" />
<item
android:id="@+id/paste"
android:title="粘贴" />
</menu>
这样,当用户长按EditText时,自定义的文本选择菜单将显示剪切/复制/粘贴选项。
对于以上问题,腾讯云提供了一系列云计算相关的产品和服务,如云服务器、云数据库、云存储等,可以根据具体需求选择适合的产品。更多关于腾讯云产品的信息,请参考腾讯云官方网站:https://cloud.tencent.com/
领取专属 10元无门槛券
手把手带您无忧上云