我如何知道何时使用支持类?

时间:2015-05-21 10:18:33

标签: android

我是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培训和指南材料不在示例中使用支持类?

任何帮助和建议都将受到高度赞赏。

1 个答案:

答案 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的当前版本也会这样做