android xml中app命名空间的用途是什么

2024-01-10

下面是在活动中显示菜单的代码(阳光udacity android课程的DetailFragment.xml)

我无法理解为什么下面需要两个不同的名称空间。为什么我不能使用命名空间 android: 而不是 app:

在下面的 xml 部分中,当我替换时 应用程序:actionProviderClass =“android.support.v7.widget.ShareActionProvider” 和 应用程序: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 有两个版本,android框架的 https://developer.android.com/reference/android/widget/ShareActionProvider.htmlv7支持库 https://developer.android.com/reference/android/support/v7/widget/ShareActionProvider.html.

在Sunshine中需要支持min SDK version 10,而ShareActionProvider是从API level 14开始添加到框架中的,那么如何向SDK 10-13提供该功能呢?你用支持库 https://developer.android.com/topic/libraries/support-library/index.html版本代替。

您可以在此处导入 build.gradle 中的支持库

dependencies {
    ...
    compile 'com.android.support:appcompat-v7:21.0.2'
}

现在回到有关应用程序名称空间的问题。 Sunshine 在其支持的较低 SDK 上使用框架中不可用的属性(actionProviderClass 和 showAsAction),因此他们需要使用支持库提供的自定义属性,并使用自定义属性你需要使用应用命名空间. The 安卓命名空间顾名思义,用于框架属性。

<?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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android xml中app命名空间的用途是什么 的相关文章

随机推荐