【问题标题】:Contextual Action Mode AppCompatActivity not show上下文操作模式 AppCompatActivity 不显示
【发布时间】:2020-04-22 18:52:35
【问题描述】:

我的活动扩展了 AppCompatActivity,我希望在其上设置一个上下文操作栏。 所以这是我的 onCreate 方法

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
MainActivity.this.startSupportActionMode(new ActionBarCallBack());

我的 ActionBarCallBack 扩展了 android.support.v7.view.ActionMode,我这样声明它

@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
    mode.getMenuInflater().inflate(R.menu.contextual_menu, menu);
    return false;
}

我的清单上设置的主题:

<style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="windowActionModeOverlay">true</item>
</style>

主活动:

<activity
        android:name=".MainActivity"
        android:label="@string/title_activity_main2"
        android:theme="@style/AppTheme.NoActionBar" >
</activity>

我的 onCreateActionMode 触发器,但 CAB 从未显示。

有什么想法吗?

【问题讨论】:

  • 你的主题真的没有父主题吗?我一直认为它必须继承自(在这种情况下)Theme.AppCompat.NoActionBar
  • 我用完整的 style.xml 和清单活动声明编辑我的问题
  • 看来您的活动主题确实没有父主题。如果添加 parent="Theme.AppCompat.Light.NoActionBar" 会发生什么?
  • Gradle Build 抱怨“找不到属性‘父’的资源标识符”。以防万一我看到我的工具栏继承自 AppTheme.PopupOverlay
  • 好的,刚刚看到我编辑我的问题的解决方案。谢谢 0X0nosugar

标签: android contextual-action-bar appcompatactivity


【解决方案1】:

这就是错误

@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
    mode.getMenuInflater().inflate(R.menu.contextual_menu, menu);
    return true; // Now it works
}

将 windowActionModeOverlay 设置为我的 Theme.NoActionBar

<item name="windowActionModeOverlay">true</item>

不必像我在 stackoverflow 线程上看到的那样从我的 toolBar 设置 startActionMode()。在 android.support.v7.view.ActionMode 上,这条线对我来说很好。

Main2Activity.this.startSupportActionMode(new ActionBarCallBack()); //android.support.v7.view.ActionMode

【讨论】:

  • 来自onCreateActionMode() 的文档“返回:如果应该创建操作模式,则返回 true,如果应该中止进入此模式,则返回 false。”
【解决方案2】:

您从 ActionMode.Callback 中实现的 onCreateActionMode 方法返回 false

尝试将返回值改为true

@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
    // Inflate menu
    return true; //  <=====  MUST RETURN TRUE
}

【讨论】:

  • 感谢您的宝贵时间,但我已经回答了。我会检查我的答案。
  • @aiqency 没问题,也许它对将来的任何人都有帮助:)
猜你喜欢
  • 2022-12-09
  • 1970-01-01
  • 1970-01-01
  • 2020-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多