我有一个EditText,它的文本通过代码选择.但我想允许用户剪切/复制所选文本.但是,在用户长按文本之前,不会显示剪切/复制上下文菜单.但它失去了实际的选择.所以,我正在考虑显示上下文菜单,因为代码选择了文本.
我在onFocusChanged中尝试了这个,但没有出现.
openContextMenu(EditText);
最佳答案
如果我正确地使用了usecase,您可以从在measuredEditText上注册的onFocusChangeListener打开上下文菜单.
原文链接:https://www.f2er.com/android/431094.html我准备了一些小测试,似乎正确支持你的用例.
您需要在正在选择EditText中的内容的钩子上打开菜单.
public class Main extends Activity {
private EditText testedEditText;
private Button selectingButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
selectingButton = (Button) findViewById(R.id.button);
testedEditText = (EditText) findViewById(R.id.textView);
registerForContextMenu(testedEditText);
selectingButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
testedEditText.setSelection(6,11);
openContextMenu(testedEditText);
}
});
}
@Override
public void onCreateContextMenu(ContextMenu menu,View v,ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu,v,menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.cmenu,menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.select_all:
return true;
case R.id.copy:
//do something
return true;
case R.id.cut:
//do something
return true;
case R.id.paste:
//do something
return true;
default:
return super.onContextItemSelected(item);
}
}
}
非常奇怪地注册了testsEditText.requestFocus(),并且为EditText设置onFocusChangedListener是不够的.
其他xml文件供参考:
cmenu.xml
main.xml中