37 votes

Bonjour Android, tutoriel de Galerie - "R.styleable ne peut pas être résolu"

Lors de l'utilisation de l'application tutorielle / exemple Hello, après avoir suivi les instructions du site, Eclipse a signalé que R.styleable ne peut pas être résolu.

Quelle est la raison de cette erreur et comment peut-on la réparer ou la contourner?

69voto

Guy Starbuck Points 14241

Par ce fil, R. styleable a été supprimé à partir d'android 1.5 et plus.

Il y a un certain nombre de façons d'obtenir de l'échantillon de travail, le plus simple que j'ai trouvé a été recommandé par Justin Anderson dans le fil lié ci-dessus:

  1. Créer un nouveau fichier XML appelé "resources.xml" avec le contenu suivant:

    <?xml version="1.0" encoding="utf-8"?> 
    <resources> 
        <declare-styleable name="Gallery1"> 
            <attr name="android:galleryItemBackground" /> 
        </declare-styleable> 
    </resources>
    
  2. Placez le fichier XML dans le res\valeurs répertoire (à côté de la strings.xml)

  3. Mise à jour le constructeur de votre ImageAdapter avec la suivante (en supposant que le ImageAdapter classe est définie dans son propre fichier):

    public ImageAdapter(Context c) {
        mContext = c;
        TypedArray a = c.obtainStyledAttributes(R.styleable.Gallery1);
        mGalleryItemBackground = a.getResourceId(R.styleable.Gallery1_android_galleryItemBackground, 0);
        a.recycle();
    }
    

Cette solution fondamentalement définit la styleable attribut comme une ressource de l'application elle-même et lui donne la structure nécessaire pour travailler dans l'application. Notez que l'application puisse s'exécuter correctement si vous omettez simplement les deux lignes de code (avant un.recycler();), tout ce code n'est de définir un arrière-plan gris autour des images dans la Galerie.

12voto

Sven Points 126

La raison de ce problème est que les ressources qu'ils vous disent à mettre en res/values/attr.xml sont:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="HelloGallery">
        <attr name="android:galleryItemBackground" />
    </declare-styleable>
</resources>

Mais ensuite, vous obtenez cette carte, qui Éclipse ne peuvent pas comprendre, et franchement, il n'a pas de sens:

public ImageAdapter(Context c) {
    mContext = c;
    TypedArray a = obtainStyledAttributes(android.R.styleable.Theme);
    mGalleryItemBackground = a.getResourceId(
            android.R.styleable.Theme_galleryItemBackground, 0);
    a.recycle();
}

C'est parce que vous ne devriez pas avoir "d'android." précédent, les ressources, la styleable nom est sujet ici, mais HelloGallery dans le réel de la ressource, et la galleryItemBackground met android entre les styleable nom et l'attribut comme ceci: Theme_android_galleryItemBackground

Donc, si vous voulez que la ImageAdapter méthode de travail avec les ressources que vous avez donné, vous devez réécrire comme ceci:

public ImageAdapter(Context c) {
    mContext = c;
    TypedArray a = obtainStyledAttributes(R.styleable.HelloGallery);
    mGalleryItemBackground = a.getResourceId(
            R.styleable.HelloGallery_android_galleryItemBackground, 0);
    a.recycle();
}

Pour de futurs problèmes concernant les ressources (R.* ne peut pas être résolu type d'erreurs), examiner /gen/R.java pour que les ressources sont effectivement d'être nommé.

5voto

Steve Pomeroy Points 3968

Un peu plus facile, et certainement plus MVCish façon est d'utiliser le système de style:

Si vous n'avez pas un thème encore, de créer un styles.xml sous res/values. En cela, vous devriez avoir:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="GalleryItem">
        <item name="android:background">?android:attr/galleryItemBackground</item>
    </style>
</resources>

Cela permettra de définir un nouveau style que nous appelons GalleryItem et réglage de l'arrière-plan des ressources de quel que soit le style est appliqué à, à la valeur de l'attribut style android:attr/galleryItemBackground (vous pouvez voir beaucoup d'exemples de ce fait dans l' frameworks/base/core/res/res/values/themes.xml dans Android source).

Puis, dans une déclaration XML pour une ImageView, vous pouvez simplement appliquer votre GalleryItem style en ajoutant style="@style/GalleryItem", par exemple:

<?xml version="1.0" encoding="utf-8"?>
<ImageView
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/icon"
  android:scaleType="fitXY"
  android:layout_width="136dip"
  android:layout_height="88dip"
  style="@style/GalleryItem"
/>

Cela permet de garder votre style de choses de votre carte de code (ce qui est bon!) et de permettre plus de générique de cartes qui n'ont pas besoin de soins de la façon dont vous êtes à la visualisation de vos données.

5voto

Dai Nguyen-Van Points 54

J'ai le même problème et j'ai trouvé dans l'exemple de code d'affichage personnalisé (PieChart) de Google

 import com.example.android.customviews.R;
 

Quand je commente cette ligne d'importation, Eclipse remarquera une erreur: "R ne peut pas être résolu en une variable". vous devez donc importer une déclaration similaire à votre paquet ci-dessus. Ex:

 import your.package.name.R;
 

il corrige une erreur similaire pour d'autres projets du mien

3voto

George Nguyen Points 1025

styleable n'est pas pris en charge http://developer.android.com/sdk/RELEASENOTES.html

Le android.R.styleable classe et de ses champs ont été retirés de l'API publique, pour mieux s'assurer de la compatibilité pour les applications. Les constantes déclarées dans android.R.styleable ont été la plate-forme et est sujet à changement arbitraire dans les deux versions, ce qui n'est pas adapté pour une utilisation par les applications. Vous pouvez toujours accéder à la plate-forme styleable attributs de vos ressources ou de code. Pour ce faire, déclarer une ressource personnalisée élément en utilisant un à votre projet res/values/R. attrs fichier, puis de déclarer l'attribut à l'intérieur. Pour des exemples, voir /samples/ApiDemos/res/values/attrs.xml. Pour plus d'informations sur les ressources personnalisées, voir la Mise en page Personnalisée des Ressources. Notez que le android.R.styleable la documentation est toujours fourni dans le SDK, mais seulement comme une référence de la plate-forme styleable attributs pour les différents éléments.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X