以下是活动中显示的菜单代码(Sunshine udacity android course的DetailFragment.xml)
我无法理解为什么下面需要两个不同的命名空间。为什么我不能使用命名空间android:而不是app:
当我更换时,在xml以下部分 应用程式:actionProviderClass = “android.support.v7.widget.ShareActionProvider” 同 应用程式:actionProviderClass = “android.widget.ShareActionProvider”
它似乎给出了一些赋值错误,但如果将app更改为android,则可以正常工作 机器人:actionProviderClass = “android.widget.ShareActionProvider”
我无法理解这里到底发生了什么。
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/action_share"
android:title="@string/action_share"
app:showAsAction="always"
app:actionProviderClass="android.support.v7.widget.ShareActionProvider" />
</menu>
答案 0 :(得分:11)
有两个版本的ShareActionProvider,the android framework's和v7 support library's。
在Sunshine中你需要支持min SDK版本10,而ShareActionProvider从API级别14添加到框架中,那么如何向SDK 10-13提供该功能?您改用the support library版本。
您可以在build.gradle中导入支持库
dependencies {
...
compile 'com.android.support:appcompat-v7:21.0.2'
}
现在回到你关于app命名空间的问题。 Sunshine使用框架中不可用的属性来支持(actionProviderClass和showAsAction)的较低SDK,因此他们需要使用支持库提供的自定义属性,并使用< strong>自定义属性您需要使用应用程序名称空间。 android命名空间用于框架属性,如名称所示。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/action_share"
android:title="@string/action_share"
app:showAsAction="always"
app:actionProviderClass="android.support.v7.widget.ShareActionProvider" />
</menu>
答案 1 :(得分:2)
我现在也正在经历Udacity课程。我在detailFragment.xml中指定actionProviderClass时遇到问题。原来,actionProviderClass属性必须使用应用名称的命名空间。我认为这可能是您正在寻找的解决方案。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:Sunshine = "http://schemas.android.com/apk/res-auto">
<item
android:id = "@+id/action_share"
android:title = "@string/action_share"
Sunshine:actionProviderClass = "android.support.v7.widget.ShareActionProvider"
Sunshine:showAsAction = "always"/>
</menu>
请注意,actionProviderClass属性正在使用 app 名称的命名空间。
解决方案来自:link。第一个答案
还要确保该应用的build.gradle与link
相同答案 2 :(得分:1)
support.v7是兼容性较旧的Android版本。要使用它,您需要添加Gradle依赖项:
dependencies {
compile 'com.android.support:appcompat-v7:23.0.1'
}