web-dev-qa-db-fra.com

Android obtient le chemin de l'image de drawable en tant que chaîne

Est-il possible d'obtenir le chemin de l'image à partir du dossier pouvant être dessiné dans Android as String? J'ai besoin de cela parce que j'implémente mon propre flux de vue où je montre les images en utilisant leur chemin sur la carte SD, mais je veux montrer une image par défaut lorsqu'il n'y a pas d'image à montrer.

Des idées comment faire cela?

30
Android-Droid

Ce sont tous des moyens:

String imageUri = "drawable://" + R.drawable.image;

Autres moyens que j'ai testés

Uri path = Uri.parse("Android.resource://com.segf4ult.test/" + R.drawable.icon);
Uri otherPath = Uri.parse("Android.resource://com.segf4ult.test/drawable/icon");

String path = path.toString();
String path = otherPath .toString();
44
karan

sur la base de certaines des réponses ci-dessus je l'improvise un peu

créer cette méthode et l'appeler en passant votre ressource

Méthode réutilisable

public String getURLForResource (int resourceId) {
    return Uri.parse("Android.resource://"+R.class.getPackage().getName()+"/" +resourceId).toString();
}

Exemple d'appel

getURLForResource(R.drawable.personIcon)

complete exemple de chargement d'image

String imageUrl = getURLForResource(R.drawable.personIcon);
// Load image
 Glide.with(patientProfileImageView.getContext())
          .load(imageUrl)
          .into(patientProfileImageView);

vous pouvez déplacer la fonction getURLForResource dans un fichier Util et la rendre static afin qu'elle puisse être réutilisée 

4
mshah

Si vous envisagez d'extraire l'image de son chemin, il est préférable d'utiliser Actifs plutôt que d'essayer de déterminer le chemin du dossier pouvant être dessiné.

    InputStream stream = getAssets().open("image.png");
    Drawable d = Drawable.createFromStream(stream, null);
2
jmgomez

Je pense que vous ne pouvez pas l'obtenir sous la forme String mais vous pouvez l'obtenir sous la forme int en obtenant la ressource id:

int resId = this.getResources().getIdentifier("imageNameHere", "drawable", this.getPackageName());
0
ARN