我有一个ListView
每个项目都是一个TextView
。
我想启用类似于EditText
显示默认上下文菜单的长按行为,其中包含“全选”、“全部剪切”、“全部复制”等项目。
有没有一种简单的方法可以为 a 启用此功能TextView
?
我有一个ListView
每个项目都是一个TextView
。
我想启用类似于EditText
显示默认上下文菜单的长按行为,其中包含“全选”、“全部剪切”、“全部复制”等项目。
有没有一种简单的方法可以为 a 启用此功能TextView
?
我想我有一个解决办法。打电话
registerForContextMenu(yourTextView);
并且您TextView
将注册以接收上下文菜单事件。
然后覆盖onCreateContextMenu
你的Activity
:
@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
实际上,您不必自己开发此功能。您只需要使用 EditText 而不是 TextView,同时将 EditText 的 android:editable 设置为 false。我的代码在这里:
R.layout.edittext.xml
<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 的值并将其粘贴到其他位置,
将 XML 属性设置{@link android.R.styleable#TextView_textIsSelectable android:textIsSelectable}
为"true"
或者
打电话{@link #setTextIsSelectable setTextIsSelectable(true)}
。
您可能希望在 ListView 上注册一个 onItemLongClickListener,然后根据所选项目为用户提供您选择的任何选项。
我有一个解决方案,但我并不完全有用。
只需使用此方法:
txtDescDetail.setCursorVisible(true);
我希望这样做。
这是解决方案
<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
}
}
预期的行为将如下图所示