android xml 中的应用命名空间有什么用
Whats the use of app namespace in android xml
下面是 activity(Sunshine udacity android 课程的DetailFragment.xml)
中显示的菜单代码
我不明白为什么下面需要两个不同的命名空间。为什么我不能使用命名空间 android: 而不是 app:
在 xml 下面的部分,当我替换的时候
app: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>
support.v7 是兼容旧 Android 版本。要使用它,你需要添加一个 Gradle 依赖项:
dependencies {
compile 'com.android.support:appcompat-v7:23.0.1'
}
我目前也在和你一样学习 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
相同
ShareActionProvider 有两个版本,the android framework's and the 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 and showAsAction),所以他们需要使用支持库提供的自定义属性,并且使用 自定义属性 你需要使用 app 命名空间。 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>
下面是 activity(Sunshine udacity android 课程的DetailFragment.xml)
中显示的菜单代码我不明白为什么下面需要两个不同的命名空间。为什么我不能使用命名空间 android: 而不是 app:
在 xml 下面的部分,当我替换的时候 app: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>
support.v7 是兼容旧 Android 版本。要使用它,你需要添加一个 Gradle 依赖项:
dependencies {
compile 'com.android.support:appcompat-v7:23.0.1'
}
我目前也在和你一样学习 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
相同ShareActionProvider 有两个版本,the android framework's and the 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 and showAsAction),所以他们需要使用支持库提供的自定义属性,并且使用 自定义属性 你需要使用 app 命名空间。 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>