Quelle est l'utilisation de l'app namespace dans android xml?

ci-dessous est le code d'un menu affiché dans une activité(détail fragment.xml de Soleil udacity android cours)

Je ne pouvais pas comprendre pourquoi deux espaces de noms différents sont nécessaires ci-dessous. Pourquoi ne puis-je pas utiliser le namespace android: au lieu de app:

dans la partie xml ci-dessous quand je remplace app: actionProviderClass= " android.soutien.v7.widget.ShareActionProvider" avec app: actionProviderClass= " android.widget.Fournisseur d'actions 151920920"

il a semblé donner quelques erreur d'affectation, mais fonctionne très bien si l'application est changée à android comme ci-dessous android: actionProviderClass= " android.widget.Fournisseur d'actions 151920920"

Je ne suis pas en mesure de comprendre ce qui se passe exactement ici.

    <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>
4
demandé sur Chetan Gowda 2016-03-16 21:44:51

3 réponses

il y a deux versions de ShareActionProvider, the android framework et le V7 support library .

dans Sunshine vous devez prendre en charge min SDK version 10, alors que ShareActionProvider a été ajouté dans le cadre à partir du niveau API 14, Alors comment fournir la fonctionnalité pour SDK 10-13? Vous utilisez la bibliothèque de soutien version à la place.

vous importez la bibliothèque de soutien dans construire.Grad ici

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

maintenant de retour à votre question sur l'espace de noms app. Sunshine utilise les attributs qui ne sont pas disponibles dans le cadre sur les SDK inférieurs qu'ils supportent (actionProviderClass et showAsAction) , donc ils ont besoin d'utiliser les attributs personnalisés fournis par la bibliothèque de soutien, et d'utiliser le attributs personnalisés vous devez utiliser le app namespace . Le android namespace est pour les attributs framework comme le nom suggéré.

<?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>
8
répondu Ken Ratanachai S. 2016-07-06 01:59:50

je suis actuellement aussi en cours D'Udacity que vous. J'ai eu des problèmes avec la spécification de la classe actionProviderClass dans le détail fragment.XML. Il s'avère que l'attribut actionProviderClass doit utiliser l'espace de noms du nom d'application. Je pense que c'est la solution que vous cherchez.

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

avis l'attribut actionProviderClass utilise l'espace de noms du nom app .

Solution trouvée à partir de: lien .La première réponse

assurez-vous Également de la construction.gradle pour l'application est le même que lien

2
répondu Clumsy-Coder 2017-05-23 12:09:41

support.v7 est une ancienne version Android compatible. Pour utiliser ceci, vous devez ajouter une dépendance Gradle:

dependencies {
        compile 'com.android.support:appcompat-v7:23.0.1'
}
1
répondu Arthur Cordova Stapassoli 2016-03-20 06:12:33