Android: AlertDialog Button no acepta el estilo

Tengo un estilo configurado para mi cuadro de diálogo de alerta, y el estilo se muestra en la mayoría de los diálogos sin problema, el único problema son los botones.

El teléfono es un HTC Evo que ejecuta SenseUI, y los botones AlertDialog siguen siendo desollados a través del tema SenseUI. He intentado cambiar mi estilo de la aplicación (rtg_style) para ser un niño de Theme.Dialog en vez de Theme.Light.NoTitleBar, y los botones para las actividades siguen siendo labrados correctamente, pero los AlertDialogs siguen siendo estilo inccorrectly. Estoy tratando de evitar tener que escribir un reemplazo AlertDialog completamente personalizado, ¿qué más puedo hacer?

Styles.xml:

<style name="rtg_style" parent="@android:style/Theme.Light.NoTitleBar"> <item name="android:windowBackground">@drawable/bluebg</item> <item name="android:buttonStyle">@style/rtg_Button</item> <item name="android:listViewStyle">@style/rtg_ListView</item> <item name="android:expandableListViewStyle">@style/rtg_ExpandableListView</item> </style> <style name="rtg_AlertDialog" parent="@style/rtg_style"> <!-- parent="@android:style/Theme.Dialog"> --> <item name="android:buttonStyle">@style/rtg_Button</item> <item name="android:listViewStyle">@style/rtg_ListView</item> <item name="android:alertDialogStyle">@style/dialog</item> </style> <style name="rtg_Button" parent="@android:style/Widget.Button"> <item name="android:background">@drawable/button</item> <item name="android:textColor">#ffffff</item> <item name="android:textSize">15sp</item> <item name="android:textStyle">bold</item> <item name="android:height">40dp</item> </style> <style name="rtg_ListView" parent="@android:style/Widget.ListView"> <item name="android:listSelector">@drawable/listview</item> </style> <style name="rtg_ExpandableListView" parent="@android:style/Widget.ExpandableListView"> <item name="android:listSelector">@drawable/listview</item> </style> <style name="base"> <item name="android:padding">10dp</item> </style> <style name="title" parent="@style/base"> <item name="android:textColor">#FFFFFF</item> <item name="android:textSize">16sp</item> <item name="android:textStyle">bold</item> </style> <style name="body" parent="@style/base"> <item name="android:textColor">#000000</item> <item name="android:textStyle">normal</item> </style> <style name="dialog"> <item name="android:fullDark">@drawable/dialog_body</item> <item name="android:topDark">@drawable/dialog_title</item> <item name="android:centerDark">@drawable/dialog_body</item> <item name="android:bottomDark">@drawable/dialog_footer</item> <item name="android:fullBright">@drawable/dialog_body</item> <item name="android:centerBright">@drawable/dialog_body</item> <item name="android:bottomBright">@drawable/dialog_footer</item> <item name="android:bottomMedium">@drawable/dialog_footer</item> <item name="android:centerMedium">@drawable/dialog_body</item> <item name="android:windowIsFloating">true</item> </style> 

Activity.java:

 AlertDialog.Builder ab = new AlertDialog.Builder(new ContextThemeWrapper(OrderSummary.this, R.style.rtg_AlertDialog)); ab.setTitle("Select a reason"); String[] reasons = new String[Shared.Reasons_RejectAll.size()]; for (int i = 0; i < Shared.Reasons_RejectAll.size(); i++) { try { reasons[i] = Shared.Reasons_RejectAll.get(i).Name; } catch (Exception ex) { ex.printStackTrace(); } } ab.setItems(reasons, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { rejectReason = Shared.Reasons_RejectAll.get(which).Name; for (int i = 0; i <= r.ItemList.length; i++){ r.ItemList[index].item.get(i).setStatus(eItemStatus.REJECTED); r.ItemList[index].item.get(i).setRejectReason(rejectReason); } adapter.notifyDataSetChanged(); } }) .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // No additional code required at this time. } }); //ab.show(); AlertDialog dialog = ab.create(); dialog.show(); 

2 Solutions collect form web for “Android: AlertDialog Button no acepta el estilo”

Algo que he intentado que funcione. Puedes usar getButton (int whichButton) para extraer la clase View del botón y luego puedes matarla como quieras.

Antes de hacer esto, llame a la función .show (), de lo contrario el botón en sí no se creará todavía, y el comando getButton () le da nulo, y NullPointerExceptions chupar. Después de que usted consigue el botón, usted puede hacer funciones del botón / TextView (el botón es un TextView extendido) como .setBackgroundDrawable y .setTextColor.

 AlertDialog alert = new AlertDialog.Builder(activity).create(); // configure things here like the title and message alert.show(); Button button = alert.getButton(AlertDialog.BUTTON_NEGATIVE); button.setBackgroundResource(R.drawable.negative_button_selector); 

Si alguien puede averiguar cómo establecer un estilo / tema fuera de crear un nuevo botón y pasar las cosas de ese botón, estoy todos los oídos porque sería mejor.

¡Rock! ¡Roca encendido!

Encontró la respuesta! De lo que he investigado, los botones en un alerta utilizan su propio diseño que no se puede anular, por lo que terminé subclases de diálogo y la construcción de un diálogo personalizado a mí mismo.

CustomDialog.java:

 public class CustomDialog extends Dialog implements OnClickListener { TextView tvTitle; TextView tvMessage; Button btnOK; ListView listView; Context context; ProgressBar prgWait; ProgressBar prgBar; public CustomDialog(Context context) { super(context, R.style.rtg_DialogActivity); setContentView(R.layout.dialog); this.context = context; // replace the background dim with a background blur effect WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.dimAmount = 0.0f; getWindow().setAttributes(lp); getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND); tvTitle = (TextView) findViewById(R.id.tvDialogTitle); tvMessage = (TextView) findViewById(R.id.tvDialogMessage); btnOK = (Button) findViewById(R.id.btnDialog); listView = (ListView) findViewById(R.id.lvDialogList); prgWait = (ProgressBar) findViewById(R.id.prgDialog); prgBar = (ProgressBar) findViewById(R.id.prgDialogBar); } public CustomDialog setTitle(String text) { tvTitle.setText(text); return this; } public CustomDialog setMessage(String text) { tvMessage.setVisibility(View.VISIBLE); tvMessage.setText(text); return this; } public CustomDialog setList(List<String> list, OnItemClickListener l) { ArrayAdapter<String> aa = new ArrayAdapter<String>(this.getContext(), android.R.layout.simple_list_item_1, list); listView.setVisibility(View.VISIBLE); listView.setAdapter(aa); listView.setOnItemClickListener(l); return this; } public CustomDialog setList(String[] list, OnItemClickListener l) { List<String> lString = new ArrayList<String>(); for (String s : list) lString.add(s); return setList(lString, l); } public CustomDialog setButton(String text, View.OnClickListener l) { btnOK.setText(text); btnOK.setOnClickListener(l); return this; } public CustomDialog setButton(String text) { return setButton(text, this); } public CustomDialog isIndeterminate(boolean b) { if (b) { prgWait.setVisibility(View.VISIBLE); btnOK.setVisibility(View.GONE); } else { prgWait.setVisibility(View.GONE); btnOK.setVisibility(View.VISIBLE); } return this; } public CustomDialog isProgress(boolean b) { if (b) { prgBar.setVisibility(View.VISIBLE); btnOK.setVisibility(View.GONE); } else { prgBar.setVisibility(View.GONE); btnOK.setVisibility(View.VISIBLE); } return this; } public CustomDialog setProgressMax(int max) { prgBar.setMax(max); return this; } public CustomDialog setProgress(int progress) { prgBar.setProgress(progress); return this; } public int getProgressMax() { return prgBar.getMax(); } public int getProgress() { return prgBar.getProgress(); } @Override public void onClick(View v) { this.dismiss(); } 

}

  • Android: animateLayoutChanges = "true" con setVisibility (View.GONE)
  • Android: mover el texto del botón a la parte inferior
  • Las guías de la API de Android son un poco confusas para mí sobre el atributo android: onClick XML
  • Almacenar un texto grande y estructurado en la aplicación Android
  • Cómo acceder a colors.xml sin especificar el nombre del color o el ID del recurso (R.color.name)
  • Android Eclipse todas las fuentes Spinner se convirtieron en blanco
  • Recursos de la cadena de fondo de Android
  • El botón no cambia su forma en el selector
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.