下面是在一个activity中显示菜单的代码(Sunshine udacity android类(class)的DetailFragment.xml)
我不明白为什么下面需要两个不同的命名空间。为什么我不能使用命名空间 android: 而不是 app:
当我替换时在下面的 xml 部分 应用:actionProviderClass="android.support.v7.widget.ShareActionProvider" 和 app:actionProviderClass="android.widget.ShareActionProvider"
它似乎给出了一些分配错误,但如果将应用程序更改为 android,则工作正常,如下所示 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>
最佳答案
ShareActionProvider 有两个版本,the android framework's和 v7 support library's .
Sunshine需要支持最低SDK版本10,而ShareActionProvider是从API level 14开始添加到框架中的,那么如何为SDK 10-13提供功能呢?您使用 the support library版本代替。
你在这里导入build.gradle中的支持库
dependencies {
...
compile 'com.android.support:appcompat-v7:21.0.2'
}
现在回到您关于应用命名空间的问题。 Sunshine 在他们支持的低端 SDK 上使用框架中没有的属性(actionProviderClass 和 showAsAction),因此他们需要使用支持库提供的自定义属性,并使用 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>
关于android - android xml中app命名空间的用途是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36044383/