Android EditText setOnCreateContextMenuListener句柄结果
我已将Android EditText setOnCreateContextMenuListener句柄结果,android,Android,我已将setOnCreateContextMenuListener设置为edittextonCreateContextMenu方法称为用户长按edittext。然后,它会打开带有“完成”和“复制”选项的上下文菜单 但我的问题是,当用户选择“完成”选项或“复制”选项时,我该如何处理 当用户单击“完成”按钮或“复制”按钮时,我可以获得任何事件吗。所以我可以通过剪辑管理器获取选定的文本 edit.setOnCreateContextMenuListener(new OnCreateContextMen
setOnCreateContextMenuListener
设置为edittextonCreateContextMenu
方法称为用户长按edittext。然后,它会打开带有“完成”和“复制”选项的上下文菜单
但我的问题是,当用户选择“完成”选项或“复制”选项时,我该如何处理
当用户单击“完成”按钮或“复制”按钮时,我可以获得任何事件吗。所以我可以通过剪辑管理器获取选定的文本
edit.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
Log.i("TAG", "onCreateContextMenu");//it is printing while context menu is created.
}
});
谢谢。您可以获得双按钮事件,如以下示例所示
public class MainActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView lv = (ListView)findViewById(R.id.lv1);
registerForContextMenu(lv);
}
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
{
super.onCreateContextMenu(menu, v, menuInfo);
if (v.getId() == R.id.lv1)
{
menu.setHeaderTitle("Select Action");
menu.add(0, v.getId(), 0, "Edit");
menu.add(0, v.getId(), 0, "Delete");
}
}
@Override
public boolean onContextItemSelected(MenuItem item)
{
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
if(item.getTitle() == "Edit")
{
// do something
}
if(item.getTitle() == "Delete")
{
// do something
}
return true;
}
希望它能帮助您。您必须覆盖编辑文本的onlong click并设置一个CAB。例如:
private ActionMode.Callback action = new ActionMode.Callback() {
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
// TODO Auto-generated method stub
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
if (item.getItemId() == android.R.id.copy){
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
Log.i("CAB",String.valueOf(clipboard.getPrimaryClip().getItemAt(0).getText()));
}
return true;
}
};
private EditText edtText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edtText = (EditText) findViewById(R.id.edtText1);
registerForContextMenu(edtText);
edtText.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
((EditText)v).setTextIsSelectable(true);
((EditText)v).setCustomSelectionActionModeCallback(action);
return false;
}
});
}
onContextItemSelected
是您应该使用的事件。但是它没有视图
参数来访问所选项目。下面是访问所选视图的技巧
public class MainActivity extends Activity
{
protected View selectedView;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView lv = (ListView)findViewById(R.id.lv1);
registerForContextMenu(lv);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
{
this.selectedView = v;
super.onCreateContextMenu(menu, v, menuInfo);
}
@Override
public boolean onContextItemSelected(MenuItem item)
{
switch(item.getId())
{
case R.id.Context_Edit:
// access to view with this.selectedView
break;
case R.id.Context_Delete:
// access to view with this.selectedView
break;
default:
return super.onContextItemSelected(item);
}
return true;
}
}
谢谢4重播,我有这样的打印日志---@重写公共布尔值onContextItemSelected(MenuItem项){Log.i(“TAG”,“onContextItemSelected”);---但它不打印。这意味着方法未调用。但您尚未获取按钮事件,请仔细查看我的答案。兄弟。@nilyes。但如果onContextItemSelected(MenuItem项)调用后,它将转到下一行。因此,我在mehod调用时已在第一行打印日志。此选项菜单无法记录任何内容,因为您尚未采取任何操作事件。@nillet-us