Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add an icon before each item in alert dialog?

I am using an AlertDialog (see the below code) and would like to put an image before each text.

For example, email icon then text "Email", Facebook icon then text "Facebook", etc.

Using the following code, how to add an icon before each text value?

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(); 
like image 262
UMAR-MOBITSOLUTIONS Avatar asked Oct 13 '10 03:10

UMAR-MOBITSOLUTIONS


People also ask

How do I add an icon to my alert box?

You can add an icon with the following code: Dialog dialog = new Dialog(context); dialog. requestWindowFeature(Window. FEATURE_LEFT_ICON); dialog.

What is the difference between an alert and an alert Dialog?

AlertDialog is a lightweight version of a Dialog. This is supposed to deal with INFORMATIVE matters only, That's the reason why complex interactions with the user are limited. Dialog on the other hand is able to do even more complex things .

What are the three buttons that can be added to a Dialog?

There are three functions for adding Buttons to Android Dialog, setPositiveButton(int textId, DialogInterface.


2 Answers

You need custom ListAdapter to add your image. One way is to subclass the ArrayAdapter (used by default by the AlertDialog). Here is an example:

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(); 

Here is the Item class

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;     } } 
like image 192
Tom Esterez Avatar answered Sep 17 '22 15:09

Tom Esterez


Do something like this:

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 

Total idea is to create layout/viewgroup and add icon+text+whatever you want into viewgroup

like image 26
Barmaley Avatar answered Sep 18 '22 15:09

Barmaley