tipos studio personalizado mensaje ejemplo edittext dialogos dialogo custom cuadro crear confirmación con android alertdialog

personalizado - mensaje de confirmación android studio



¿Cómo agregar un icono antes de cada elemento en el diálogo de alerta? (4)

Estoy usando AlertDialog (vea el código a continuación) y me gustaría poner una imagen antes de cada texto.

Por ejemplo, el ícono del correo electrónico, luego el texto "Correo electrónico", el ícono de Facebook y luego el texto "Facebook", etc.

Usando el siguiente código, ¿cómo agregar un icono antes de cada valor de texto?

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


Haz algo como esto:

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

La idea total es crear un diseño / grupo de visualización y agregar el icono + texto + lo que quieras en el grupo de vista


Me gusta la solución de , pero recomiendo utilizar la función relativa para el soporte de RTL.

Entonces usa esto:

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

en lugar de esto:

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


Necesita ListAdapter personalizado para agregar su imagen. Una forma es subclasificar el ArrayAdapter (usado por defecto por AlertDialog ). Aquí hay un ejemplo:

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

Aquí está la clase de Artículo

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; } }


Para escalar imágenes:

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