Comment ajouter une icône dans la boîte de dialogue d'alerte avant chaque élément?

J'utilise AlertDialog (voir le code ci-dessous). Maintenant, je souhaite mettre une image avant chaque texte.

Par exemple, l'icône du courrier électronique, puis le texte "Email", l'icône Facebook puis le texte "Facebook", etc.

  • Android: Realm + Retrofit 2 + Gson
  • Solution alternative pour setJavaScriptEnabled (true);
  • Barre d'outils Android Lollipop vs Vue personnalisée
  • Authentification Android avec Google OpenID. Quoi de neuf?
  • Comment rendre les applications Android 4.0 compatibles avec l'arrière?
  • Comment créer un tiroir de navigation personnalisé dans Android
  • En utilisant le code suivant, comment puis-je ajouter une icône avant chaque valeur de texte?

    final CharSequence[] items = { "Email", "Facebook", "Twitter", "LinkedIn" }; AlertDialog.Builder builder = new AlertDialog.Builder(More.this); builder.setTitle("Share Appliction"); builder.setItems(items, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int item) { if (item == 0) { } else if (item == 1) { } else if (item == 2) { } else if(item == 3) { } } }); AlertDialog alert = builder.create(); alert.show(); 

    4 Solutions collect form web for “Comment ajouter une icône dans la boîte de dialogue d'alerte avant chaque élément?”

    Vous devez utiliser un ListAdapter personnalisé pour ajouter votre image. Sur le chemin est de sous- ArrayAdapter (utilisé par défaut par AlertDialog ). Voici un exemple:

     final Item[] items = { new Item("Email", android.R.drawable.ic_menu_add), new Item("Facebook", android.R.drawable.ic_menu_delete), new Item("...", 0),//no icon for this one }; ListAdapter adapter = new ArrayAdapter<Item>( this, android.R.layout.select_dialog_item, android.R.id.text1, items){ public View getView(int position, View convertView, ViewGroup parent) { //Use super class to create the View View v = super.getView(position, convertView, parent); TextView tv = (TextView)v.findViewById(android.R.id.text1); //Put the image on the TextView tv.setCompoundDrawablesWithIntrinsicBounds(items[position].icon, 0, 0, 0); //Add margin between image and text (support various screen densities) int dp5 = (int) (5 * getResources().getDisplayMetrics().density + 0.5f); tv.setCompoundDrawablePadding(dp5); return v; } }; new AlertDialog.Builder(this) .setTitle("Share Appliction") .setAdapter(adapter, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { //... } }).show(); 

    Voici la classe d'objet

     public static class Item{ public final String text; public final int icon; public Item(String text, Integer icon) { this.text = text; this.icon = icon; } @Override public String toString() { return text; } } 

    Faites quelque chose comme ceci:

     ViewGroup layout=new LinearLayout(context); TextView tv=new TextView(context); //your text tv.setText("my text"); ImageView imageView=new ImageView(context); //your icon //filling image view with icon bitmap (in this case from resource) imageView.setImageBitmap(BitmapFactory.decodeStream(context.getResources().openRawResource(resourceId))); //ensuring that icon size will be more or less like text height imageView.setAdjustViewBounds(true); imageView.setMaxHeight((int )(tv.getLineHeight()*1.5)); imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); layout.addView(imageView); //adding icon tv.setGravity(Gravity.BOTTOM|Gravity.LEFT); layout.addView(tv); //adding text 

    L'idée totale est de créer un layout / viewgroup et ajouter une icône + texte + tout ce que vous voulez dans viewgroup

    J'aime la solution de Tom Esterez , mais je recommande d'utiliser la fonction relative pour le support RTL. Utilisez donc ceci:

     tv.setCompoundDrawablesRelativeWithIntrinsicBounds(items[position].iconID, 0, 0, 0); 

    au lieu de cela:

     tv.setCompoundDrawablesWithIntrinsicBounds(items[position].iconID, 0, 0, 0); 

    Pour agrandir les images:

     //Put the image on the TextView int dp50 = (int) (50 * getResources().getDisplayMetrics().density + 0.5f); Drawable dr = getResources().getDrawable(R...YOUR_DRAWABLE); Bitmap bitmap = ((BitmapDrawable) dr).getBitmap(); Drawable d = new BitmapDrawable(getResources(), Bitmap.createScaledBitmap(bitmap, dp50, dp50, true)); tv.setCompoundDrawablesWithIntrinsicBounds(d, null, null, null); // Add margin between image and text (support various screen densities) int dp10 = (int) (10 * getResources().getDisplayMetrics().density + 0.5f); tv.setCompoundDrawablePadding(dp10); 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.