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

 嘤_嘤_嘤 发布于 2023-02-13 16:11

您好,感谢您抽出时间阅读此问题.

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

    


    

    

    


如你所见,我的目标是sdk 8+.我已经按照建议使用了Theme.AppCompat主题.

我的菜单文件如下所示:




    
    
    


我使用自己的命名空间作为showAsAction属性.

我的活动扩展了ActionBarActivity类.

问题是:在设备和模拟器上的sdk 10(android 2.3.3)上,溢出菜单(操作栏右侧的三个点)未显示.操作栏上仅显示前两个菜单项.如果我按下设备上的"菜单"按钮,则第三项显示在屏幕的左下角(而不是从右上角显示,因为在具有更新的Android版本的设备上).相同的代码在模拟器上的android sdk 17上运行良好(溢出菜单显示正确的操作).

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

我有什么遗漏或是否有使用actionbar compat的推荐方法的替代解决方案?

感谢您的时间.

2 个回答
  • @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;
    }
    

    2023-02-13 16:14 回答
  • 试着像我一样表现出来.

    我手动添加溢出菜单(三个点):

    <item
        android:id="@+id/menu_more"
        android:icon="@drawable/abc_ic_menu_moreoverflow_normal_holo_light"
        android:title="@string/action_settings"
        myapp:showAsAction="always">
        <menu>
            <item
                android:id="@+id/submenu_about"
                android:showAsAction="always"
                android:title="@string/menu_about"/>
        </menu>
    </item>
    

    和覆盖菜单按钮单击活动以显示此菜单(解决方案从硬件菜单按钮上的操作栏中的打开子菜单单击):

    private Menu mainMenu;    
    
    ...
    
    @Override
        public boolean onKeyUp(int keyCode, KeyEvent event) {
            if (event.getAction() == KeyEvent.ACTION_UP) {
                switch (keyCode) {
                case KeyEvent.KEYCODE_MENU:
    
                    mainMenu.performIdentifierAction(R.id.menu_more, 0);
                    return true;
                }
    
            }
            return super.onKeyUp(keyCode, event);
        }
    

    2.2的结果如下:

    Android 2.2溢出菜单

    希望它能帮到你.

    2023-02-13 16:16 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有