我有一个包含的。
我想要启用长按行为,类似于,它会显示默认上下文菜单,包括"全选"、"剪切"、"复制"等项。
是否有一种简单的方法可以为启用此功能?
我有一个包含的。
我想要启用长按行为,类似于,它会显示默认上下文菜单,包括"全选"、"剪切"、"复制"等项。
是否有一种简单的方法可以为启用此功能?
我认为我有一个解决方案。只需调用
registerForContextMenu(yourTextView);
并且你的TextView
将被注册以接收上下文菜单事件。
然后在你的Activity
中重写onCreateContextMenu
:
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
//user has long pressed your TextView
menu.add(0, v.getId(), 0, "text that you want to show in the context menu - I use simply Copy");
//cast the received View to TextView so that you can get its text
TextView yourTextView = (TextView) v;
//place your TextView's text in clipboard
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
clipboard.setText(yourTextView.getText());
}
希望这能帮到你和其他寻找从 TextView
复制文本的人。
item.setOnMenuItemClickListener(e->{
//将接收到的View强制转换为TextView,以便获取其文本
TextView textView = (TextView) v;
//将TextView的文本放入剪贴板
ClipboardManager clipboard = (ClipboardManager)requireContext().getSystemService(Context.CLIPBOARD_SERVICE);
clipboard.setPrimaryClip(ClipData.newPlainText("Text", textView.getText().toString()));
return true;
});
- undefined{@link android.R.styleable#TextView_textIsSelectable android:textIsSelectable}
设置为"true"
或调用{@link #setTextIsSelectable setTextIsSelectable(true)}
方法。<EditText xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="40dip"
android:editable="false"
android:background="@null"
android:textColor="#FFFFFF"/>
ListItemCopyTextActivity.java
public class ListItemCopyTextActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout ll = new LinearLayout(this);
ListView lv = new ListView(this);
String[] values = new String[15];
for (int i = 0; i < 15; i++) {
values[i] = "ListItem NO." + i;
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
R.layout.edittext, values);
lv.setAdapter(adapter);
ll.addView(lv, LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
setContentView(ll);
}
}
这是解决方案
<TextView
android:id="@+id/textID"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:clickable="true"
android:focusable="true"
android:text="Terms and Conditions"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
重写 setOnLongClickListener
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
textID.setTextIsSelectable(true)
textID. setOnLongClickListener {
val clipboardManager = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
val clip = ClipData.newPlainText("Copied String", textID.text)
clipboardManager.setPrimaryClip(clip)
true // Or false if not consumed
}
}
预期的行为将类似于下面的图像
我有一个解决方案,但它可能并不是非常有用。
只需使用这种方法:
txtDescDetail.setCursorVisible(true);
我希望能够做到。