我有一个 EditText
,它的文本是通过代码选择的。但我想允许用户剪切/复制所选的文本。然而,剪切/复制上下文菜单直到用户长按文本才会出现。但这样就失去了实际的选择。因此,我想在文本被代码选择时显示上下文菜单。
我尝试在 onFocusChanged 中做这个操作,但没有出现任何东西。
openContextMenu(EditText);
我有一个 EditText
,它的文本是通过代码选择的。但我想允许用户剪切/复制所选的文本。然而,剪切/复制上下文菜单直到用户长按文本才会出现。但这样就失去了实际的选择。因此,我想在文本被代码选择时显示上下文菜单。
我尝试在 onFocusChanged 中做这个操作,但没有出现任何东西。
openContextMenu(EditText);
如果我正确理解您的用例,您可以从注册在testedEditText上的onFocusChangeListener打开上下文菜单。
我为此准备了一些小测试,似乎正确支持您的用例。 您需要在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);
}
}
很奇怪的是,仅仅注册 testedEditText.requestFocus()
,并为 EditText 设置 onFocusChangedListener
是不够的。
参考的其他 xml 文件: cmenu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/select_all"
android:title="select all"
/>
<item android:id="@+id/copy"
android:title="copy"
/>
<item android:id="@+id/cut"
android:title="cut"
/>
<item android:id="@+id/paste"
android:title="paste"
/>
</menu>
main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<EditText android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World, Initial Text..."
android:layout_centerInParent="true"
/>
<Button android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:text="button"
/>
</RelativeLayout>