草庐IT

Android ActionBar 兼容溢出菜单未在 sdk 10 上显示

coder 2023-11-30 原文

您好,感谢您花时间阅读这个问题。

我正在尝试开发一个将使用 ActionBar 兼容库的 Android 应用程序。在使用 compat 库时,我已经遵循(据我所知)所有建议。我的 list 看起来像这样(只显示相关代码):

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"        
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application            
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.AppCompat.Light" >

    </application>

</manifest>

如您所见,我的目标是 sdk 8+。我已经按照推荐使用了 Theme.AppCompat 主题。

我的菜单文件是这样的:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:cds="http://schemas.android.com/apk/res-auto" >

    <item
        android:id="@+id/action_map"
        android:icon="@drawable/ic_action_map"
        android:title="@string/action_map"
        cds:showAsAction="ifRoom"/>
    <item
        android:id="@+id/action_search"
        android:icon="@drawable/ic_action_search"
        android:title="@string/action_search"
        cds:showAsAction="ifRoom"/>
    <item
        android:id="@+id/action_mail"
        android:icon="@drawable/ic_action_mail"
        android:title="@string/action_mail"
        cds:showAsAction="ifRoom"/>

</menu>

我正在为 showAsAction 属性使用我自己的命名空间。

我的 Activity 扩展了 ActionBarActivity 类。

问题是这样的:在 sdk 10 (android 2.3.3) 上,在设备和模拟器上,溢出菜单(操作栏右侧的三个点)都没有显示。操作栏上仅显示前 2 个菜单项。如果我按下设备上的“菜单”按钮,那么第三个项目将从屏幕的左下角显示(而不是从右上角显示在具有更新的 android 版本的设备上)。相同的代码在模拟器上的 android sdk 17 上运行良好(溢出菜单显示正确的操作)。

我已经在网上搜索了解决方案,但找不到针对这个特定问题的解决方案。如果我没有在 android 2.3.3 设备上安装具有相同操作栏并显示溢出菜单图标并且像在任何最近的 android 设备上一样正常工作的应用程序,我会放弃这个问题。此应用程序的一个示例是 todoist 应用程序 ( https://en.todoist.com/android ) 或 handcent 应用程序 ( https://play.google.com/store/apps/details?id=com.handcent.nextsms&hl=en ),它们在此设备上均运行良好。

有什么我遗漏的吗?或者是否有推荐的使用操作栏兼容方式的替代解决方案?

感谢您的宝贵时间。

最佳答案

@Andrei Google 已经在 pre honycomb 的 appcompat 中禁用了菜单溢出按钮。 如果您真的想添加它,请转到 android 的 github 存储库并下载 platform_frameworks_support。它在 platform_framework_support_master/v7/appcompat 中包含 appcompat 的源代码。

在 appcompat 中创建一个 libs 文件夹并放入最新的 android-support-v4.jar。 现在打开文件 v7/appcompat/src/android/support/v7/internal/view/ActionBarPolicy.java。 您会看到 showOverflowMenuButton 对于 pre honycomb 返回 false。只需返回 true 并将此编辑的 appcompat 作为库添加到您的项目 而且您不需要任何自定义溢出按钮 这对我有用。 对不起我的英语

编辑:来自 android/support/v7/internal/view/ActionBarPolicy.java 的实际代码

public boolean showsOverflowMenuButton() {
    // Only show overflow on HC+ devices
    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB;
}

关于Android ActionBar 兼容溢出菜单未在 sdk 10 上显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20311353/

有关Android ActionBar 兼容溢出菜单未在 sdk 10 上显示的更多相关文章

  1. ruby-on-rails - Rails 编辑表单不显示嵌套项 - 2

    我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格:Editingkategori{:action=>'update',:id=>@konkurrancer.id})do|f|%>'Trackingurl',:style=>'width:500;'%>'Editkonkurrence'%>|我的konkurrencer模型:has_one:link我的链接模型:classLink我的konkurrancer编辑操作:defedit@konkurrancer=Konkurrancer.find(params[:id])@konkurrancer.link_attrib

  2. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  3. ruby - 我可以使用 aws-sdk-ruby 在 AWS S3 上使用事务性文件删除/上传吗? - 2

    我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的

  4. ruby-on-rails - 使用 Sublime Text 3 突出显示 HTML 背景语法中的 ERB? - 2

    所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择

  5. ruby-on-rails - 未在 Ruby 中初始化的对象 - 2

    我在Rails工作并有以下类(class):classPlayer当我运行时bundleexecrailsconsole然后尝试:a=Player.new("me",5.0,"UCLA")我回来了:=>#我不知道为什么Player对象不会在这里初始化。关于可能导致此问题的操作/解释的任何建议?谢谢,马里奥格 最佳答案 havenoideawhythePlayerobjectwouldn'tbeinitializedhere它没有初始化很简单,因为你还没有初始化它!您已经覆盖了ActiveRecord::Base初始化方法,但您没有调

  6. ruby-on-rails - link_to 不显示任何 rails - 2

    我试图在索引页中创建一个超链接,但它没有显示,也没有给出任何错误。这是我的index.html.erb代码。ListingarticlesTitleTextssss我检查了我的路线,我认为它们也没有问题。PrefixVerbURIPatternController#Actionwelcome_indexGET/welcome/index(.:format)welcome#indexarticlesGET/articles(.:format)articles#indexPOST/articles(.:format)articles#createnew_articleGET/article

  7. ruby-on-rails - 如何在 Rails View 上显示错误消息? - 2

    我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c

  8. ruby-on-rails - 复数 for fields_for has_many 关联未显示在 View 中 - 2

    目前,Itembelongs_toCompany和has_manyItemVariants。我正在尝试使用嵌套的fields_for通过Item表单添加ItemVariant字段,但是使用:item_variants不显示该表单。只有当我使用单数时才会显示。我检查了我的关联,它们似乎是正确的,这可能与嵌套在公司下的项目有关,还是我遗漏了其他东西?提前致谢。注意:下面的代码片段中省略了不相关的代码。编辑:不知道这是否相关,但我正在使用CanCan进行身份验证。routes.rbresources:companiesdoresources:itemsenditem.rbclassItemi

  9. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  10. ruby-on-rails - 在 Flash 警报 Rails 3 中显示错误消息 - 2

    如果我在模型中设置验证消息validates:name,:presence=>{:message=>'Thenamecantbeblank.'}我如何让该消息显示在闪光警报中,这是我迄今为止尝试过的方法defcreate@message=Message.new(params[:message])if@message.valid?ContactMailer.send_mail(@message).deliverredirect_to(root_path,:notice=>"Thanksforyourmessage,Iwillbeintouchsoon")elseflash[:error]

随机推荐