android - ActionBar 菜单在 ActionMode 下不起作用

标签 android

我是 Android 开发的新手,我希望在 ActionMode 上再多一个菜单,包括剪切、复制、全选。我想在此菜单中添加“标记”。

所以我在下面的main.xml中添加了一个项目,就是它的以下代码。

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.fn.MainActivity" >

<item
    android:id="@+id/action_settings1"
    android:orderInCategory="100"
    android:onClick="onContextualMenuItemClicked"
    android:title="Mark"
    app:showAsAction="ifRoom"/>  

<item
    android:id="@+id/action_settings"
    android:orderInCategory="100"
    android:title="@string/action_settings"
    app:showAsAction="never"/>

</menu>

这已经过测试,在大多数手机上都能正常工作,但在少数手机上长按文本,它会显示消息

不幸的是,应用已停止

没有其他进程,我的应用程序突然关闭。

我不知道为什么?有人可以帮我吗?

如果我从那个项目中删除下面这行,它将起作用。

    android:onClick="onContextualMenuItemClicked"

但我在 Activity 中触发了那个 onclick,

public void onContextualMenuItemClicked(MenuItem item) {
    /*switch (item.getItemId()) {
        case R.id.mark:
            webView.loadUrl("javascript:doMouseUp();");             
            break;
        default:
            System.out.println("default");
            break;
    }
    if (mActionMode != null) {
        mActionMode.finish();
    }*/
}

更新

@Override
public void onActionModeStarted(ActionMode mode) {
    if (mActionMode == null) {
        mActionMode = mode;
        Menu menu = mode.getMenu();
        menu.clear();
        mode.getMenuInflater().inflate(R.menu.main, menu);
    }
    super.onActionModeStarted(mode);
}

最佳答案

看起来您正在使用 ActionBarActivity 扩展 MainActivity。这是Android KitKat 之后才支持的。在版本 5 及更高版本中,它不会产生问题。

您需要使用 Activity 扩展 MainActivity,然后它才适合您。

public class MainActivity extends Activity {

然后,您需要在项目结构中的/res/menu 下有单独的 xml 文件 (myMenu.xml)。

我的菜单.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.example.fn.MainActivity" >

    <item
        android:id="@+id/mark"       
        android:showAsAction="always"
        android:onClick="onContextualMenuItemClicked"
        android:title="Mark">
    </item>

</menu>

复制此方法并根据需要进行更改并在 Activity 中替换。

@Override
public void onActionModeStarted(ActionMode mode) {
    if (mActionMode == null) {
        mActionMode = mode;
        Menu menu = mode.getMenu();
        menu.clear();
        mode.getMenuInflater().inflate(myMenu, menu);
    }
    super.onActionModeStarted(mode);
}

就是这样,希望现在对您有用。

关于android - ActionBar 菜单在 ActionMode 下不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37856156/

相关文章:

android - 如何在直接数据库访问和内容提供者之间做出决定?

android - 将 Socket.IO 框架与 native WebSocket 客户端一起使用

Android GraphView Gradle "Failed to run"错误?

android - 如何通过 Intent 播放 YouTube 视频?

Android Studio、Gradle 根据 flavor 构建时使用不同的代码

java - 搜索图标未出现在操作栏中

Android Camera2 捕捉图像倾斜

android - 如何在kotlin中使用androidannotations库?

android - 如何在 Picasso 中为 resize() 值选择值

java - 如何将布局作为函数参数传递