【问题标题】:Android appcompact doesn't show copy action from Contextual Action Bar for text selectionAndroid appcompat 不显示上下文操作栏中的复制操作以进行文本选择
【发布时间】:2015-01-13 17:05:44
【问题描述】:

我遇到了一个奇怪的问题。
当我使用 android holo 主题作为默认主题,然后在 webview 上选择文本时,上下文操作栏正确显示。

<style name="MyTheme" parent="Theme.AppCompat.Light">   
</style>

但是当我使用 app compact holo 主题时,全选和复制操作消失了。

<style name="MyTheme" parent="android:Theme.Holo.Light">   
</style>

我的问题在哪里?我的应用支持 android 设备 4.0+

【问题讨论】:

  • 如果您使用的是应用程序紧凑主题,那么您必须使用 app:showAsAction="always" 而不是 android:showAsAction="always" 作为菜单项,并为该 xmlns:app="http://schemas.android.com/apk/res-auto 添加 xml 架构。
  • @PiyushGupta 好吧,实际上,我不使用任何自定义选项菜单或自定义 CAB,这是 Web 视图选择的默认行为(我的意思是我不会覆盖 onCreateOptionMenu 或类似的东西) ,在多款三星设备上测试

标签: android android-webview android-appcompat


【解决方案1】:

因为在您的 menu.xml 文件中,您使用 app:showAsAction="ifRoom" 属性而不是 app commpat 主题。 请将app:showAsAction="ifRoom" 更改为android:showAsAction="ifRoom" 并且应该可以工作

例子

对于这种风格

<style name="AppTheme" parent="android:Theme.Holo.Light">

在菜单下方工作

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:tools="http://schemas.android.com/tools"
      tools:context=".MainActivity">
    <item android:id="@+id/pase"
          android:title="@string/action_settings"
          android:orderInCategory="100"
          android:icon="@drawable/abc_ic_menu_paste_mtrl_am_alpha"
       //look here is a different
          android:showAsAction="ifRoom"/>
    <item android:id="@+id/copy"
          android:title="@string/action_settings"
          android:icon="@drawable/abc_ic_menu_copy_mtrl_am_alpha"
          android:orderInCategory="100"
          android:showAsAction="ifRoom"/>
    <item android:id="@+id/action_settings"
          android:title="@string/action_settings"
          android:orderInCategory="100"
          android:showAsAction="never"/>
</menu>

对于这种风格

<style name="AppTheme" parent="Theme.AppCompat.Light">

在菜单下方工作

<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=".MainActivity">
    <item android:id="@+id/pase"
          android:title="@string/action_settings"
          android:orderInCategory="100"
          android:icon="@drawable/abc_ic_menu_paste_mtrl_am_alpha"
       //look here is a different
          app:showAsAction="ifRoom"/>
    <item android:id="@+id/copy"
          android:title="@string/action_settings"
          android:icon="@drawable/abc_ic_menu_copy_mtrl_am_alpha"
          android:orderInCategory="100"
          app:showAsAction="ifRoom"/>
    <item android:id="@+id/action_settings"
          android:title="@string/action_settings"
          android:orderInCategory="100"
          app:showAsAction="never"/>
</menu>

此外,如果您使用 Theme.AppCompat.Light,您应该在代码中使用 ActivityActionBar。

【讨论】:

  • 我不明白你到底是什么意思。你如何给你的菜单充气?如果你想创建自己的菜单,你必须重写 onCreateOptionMenu 方法。
  • 所以原因和上面的例子一样,一些实现复制粘贴操作栏的人必须使用appCommpat的属性。
  • 但我在 Nexus 5 上测试了您的问题,一切正常,这些菜单看起来不同,但所有选项都可见。
  • 建议使用应用兼容组件,因为标准 Android Api 已经修复了许多已知问题
  • 你扩展了Activity还是ActionBarActivity?如果 Activity 尝试更改为 ActionBarActivity
猜你喜欢
  • 1970-01-01
  • 2012-05-25
  • 2013-07-12
  • 1970-01-01
  • 1970-01-01
  • 2014-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多