标题翻译
TextView: How to prevent displaying the action menu when selecting text in TextView?
问题
我有一个可选的 TextView。
我想在选择文本时阻止显示上下文菜单。
我实现了以下代码,但仍然显示操作栏和上下文菜单。
tv.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
// 返回 true 以确保 yourTextView 仍然可选
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
// 清除所有操作项,以提供无操作模式的选择
menu.clear();
return false;
}
@Override
public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
return false;
}
@Override
public void onDestroyActionMode(ActionMode actionMode) {
}
});
如何永久移除它?
英文翻译
I have a selectable TextView.
I want to prevent showing the context menu when selecting text.
I implemented this code but action bar and context menu still is displayed.
tv.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
// Return true to ensure the yourTextView is still selectable
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
// Remove all action items to provide an actionmode-less selection
menu.clear();
return false;
}
@Override
public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
return false;
}
@Override
public void onDestroyActionMode(ActionMode actionMode) {
}
});
How can it be remove forever?
答案1
得分: 0
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
menu.removeItem(android.R.id.selectAll);
menu.removeItem(android.R.id.cut);
menu.removeItem(android.R.id.copy);
menu.removeItem(android.R.id.paste);
menu.removeItem(android.R.id.replaceText);
menu.removeItem(android.R.id.shareText);
return true;
}
尝试手动从菜单中移除项目。我希望现在应该可以工作了。
英文翻译
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
menu.removeItem(android.R.id.selectAll);
menu.removeItem(android.R.id.cut);
menu.removeItem(android.R.id.copy);
menu.removeItem(android.R.id.paste);
menu.removeItem(android.R.id.replaceText);
menu.removeItem(android.R.id.shareText);
return true;
}
Try to manually remove item from the menu. I hope it should work now.
答案2
得分: 0
我思考后最终写下了以下的代码:
tv.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
removeActionBar(getWindow().getDecorView());
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
return false;
}
@Override
public void onDestroyActionMode(ActionMode actionMode) {
}
});
private void removeActionBar(View v) {
ViewGroup viewgroup = (ViewGroup) v;
for (int i = 0; i < viewgroup.getChildCount(); i++) {
View v1 = viewgroup.getChildAt(i);
if (v1 instanceof ViewGroup)
removeActionBar(v1);
if (v1 instanceof ActionBarContextView) {
viewgroup.removeView(v1);
}
}
}
英文翻译
I thought and finally wrote the following code:
tv.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
removeActionBar(getWindow().getDecorView());
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
return false;
}
@Override
public void onDestroyActionMode(ActionMode actionMode) {
}
});
private void removeActionBar(View v) {
ViewGroup viewgroup = (ViewGroup) v;
for (int i = 0; i < viewgroup.getChildCount(); i++) {
View v1=viewgroup.getChildAt(i);
if ( v1 instanceof ViewGroup )
removeActionBar(v1);
if ( v1 instanceof ActionBarContextView ) {
viewgroup.removeView(v1);
}
}
}
专注分享java语言的经验与见解,让所有开发者获益!
评论