Whats the use of app namespace in android xml

时光总嘲笑我的痴心妄想 提交于 2019-12-03 06:44:31

There're two versions of ShareActionProvider, the android framework's and the v7 support library's.

In Sunshine you need to support min SDK version 10, while ShareActionProvider was added into the framework from API level 14, so how to provide the feature to SDK 10-13? You use the support library version instead.

You import the support library in build.gradle here

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

Now back to your question about the app namespace. Sunshine is using the attributes that are not available in the framework on the lower SDKs they support (actionProviderClass and showAsAction), so they need to use the custom attributes provided by the support library, and to use the custom attributes you need to use the app namespace. The android namespace is for the framework attributes as the name suggested.

<?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>
Clumsy-Coder

I'm currently also going through Udacity course as you are. I was having problem with the specifying the actionProviderClass in the detailFragment.xml. Turns out the actionProviderClass attribute must use the namespace of the app name. I think this might be solution you're looking for.

<?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>

Notice the actionProviderClass attribute is using the namespace of the app name.

Solution found from: link .The first answer

Also make sure the build.gradle for the app is the same as link

Arthur Cordova Stapassoli

support.v7 is a compatibility older Android version. To use this, you need to add a Gradle dependencies:

dependencies {
        compile 'com.android.support:appcompat-v7:23.0.1'
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!