我的应用程序包含带有文本视图项目的recyclerview。在每个TextView项目上,我都定义了一些功能,例如将文本共享到另一个应用程序。
如何将OnlongPress或OnCreateContextMenu与(启用(选择和副本文本相结合?可以从上下文菜单中启用Select-copy文本。
当然,我可以使用选择文本。但这冲突在TextView项目上的长按(上下文(菜单。
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:id="@+id/pwTextView"
android:enabled="true"
android:textIsSelectable="true" <== mandatory
android:focusable="true" <== optionally
android:longClickable="true" /> <== optionally
当然,在选择文本后,我想将上下文菜单恢复。
这个功能是现实的吗?是的。对于应用程序,这是必不可少的。我也在其他应用程序中看到了它; - (
以下解决方案在大多数情况下有助于我。
我希望文本可以选择(用于复制和粘贴(,或者希望其他手势可以工作。
最初在文本字段上设置手势:
- 在布局文件或以编程方式中,将Textisselectections设置为false。
- 用手势在文本视图上设置一个OnTouchListener。
- 允许其中一个手势切换到TextSelection模式。见下文。
如何以编程方式设置TextSelection?
- 设置Textisselectable,可集中的,可长的
- 将OnTouchListener设置为null。
- 在TextView上安装ClickListener,以允许您切换回原始的TouchListener。
1(安装您的手势Handler:
// Create your Touch Listener
onTouchListener = new OnSwipeTouchListener(mCtx, this);
view.setOnTouchListener( onTouchListener);
2(切换到TextSeluction Modus:
// Create your popup with an menu option to switch to textselection modus:
PopupMenu popup = new PopupMenu(mCtx, view);
popup.inflate(R.menu.text_options_menu);
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case ...
case R.id.text_textisselectable:
view.setOnTouchListener(null);
((TextView)view).setTextIsSelectable( true);
((TextView)view).setFocusable( true);
((TextView)view).setLongClickable( true);
// Install a click listener to switch back to the previous Touch Listener
((TextView)view).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PopupMenu popupx = new PopupMenu(mCtx, view);
popupx.inflate(R.menu.selecttext_back_menu);
popupx.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
((TextView)view).setTextIsSelectable( false);
((TextView)view).setFocusable( false);
((TextView)view).setLongClickable( false);
view.setOnTouchListener(onTouchListener);
return true;
}});
popupx.show();
}
});
break;