我是Android平台开发的新手,并试图了解我何时知道或预测何时必须使用支持类?这可能是个愚蠢的问题,但让我举一个简单的例子。假设我想为我的应用程序添加一个共享功能,所以我去DAC并看到example如何做到这一点。我仔细阅读了本手册,并参阅了有关限制的说明,即
注意:从API级别14及更高版本
开始,可以使用ShareActionProvider
似乎这对我来说没关系,因为minSdkVersion在我的应用中设置为14。我将该代码段复制粘贴到我的项目中,启动应用程序并且......崩溃时出现以下错误:
05-21 12:42:07.638: E/AndroidRuntime(25291): java.lang.UnsupportedOperationException: This is not supported, use MenuItemCompat.getActionProvider()
我更新我的源代码以使用以下代码,而不是我在文档中找到的代码:
MenuItem menuItem = menu.findItem(R.id.action_share);
ShareActionProvider mShareActionProvider = (ShareActionProvider)MenuItemCompat.getActionProvider(menuItem);
启动应用。乍一看它正在工作但不是共享图标我可以在ActionBar中看到文本SHARE。嗯,谷歌搜索后我在菜单布局中替换以下行
android:actionProviderClass="android.widget.ShareActionProvider"
到
app:actionProviderClass="android.support.v7.widget.ShareActionProvider"
万岁!最后我得到了我想要的东西!
这不是我第一次在学习Android平台时遇到这样的障碍,所以我试图找出是否有任何经验法则可以帮助我预测这种情况?
至于支持库,不是我为了目的添加了它。我在Android Studio中创建项目时自动添加了此库。在玩Android Studio后我发现它会自动将它添加到项目中,除非min SDK设置为最新的21或22版本。因此,从技术上讲,几乎所有应用程序都必须使用此库在更广泛的Android设备上运行。如果这是真的,那么为什么Android培训和指南材料不在示例中使用支持类?
任何帮助和建议都将受到高度赞赏。
答案 0 :(得分:1)
我正试图找出是否有任何经验法则可以帮助我预测这种情况
我不知道“这种情况”超出了你所引用的那种情况。
在这种特定情况下,第一步中引用的菜单资源使用android:showAsAction="ifRoom"
而不是app:showAsAction="ifRoom"
。如果您使用appcompat-v7
操作栏后退,则需要后者。因此,此示例不得使用appcompat-v7
操作栏后退。
毫无疑问,可以在这方面改进文档,为两个操作栏实现提供指示,或者至少肯定地说明他们正在使用哪个操作栏实现。
从技术上讲,几乎所有应用程序都必须使用此库在更广泛的Android设备上运行。
没有。零应用程序 使用appcompat-v7
在各种Android设备上运行,一直回到API级别1。
然而:
如果您想在运行Android 1.x / 2.x的设备上设置操作栏,则需要一个操作栏反向端口,而appcompat-v7
是我所知道的唯一当前维护的全功能后端口(鉴于不推荐使用ActionBarSherlock)
如果您想在运行Android 4.4及更低版本的设备上尝试使用类似于Material Design的用户界面,appcompat-v7
的当前版本也会这样做