Android Alert Dialog Fondo de aplicación API 11+
Creo un AlertDialog
con el código de abajo. Por alguna razón estoy obteniendo un fondo extra (ver foto) en Honeycomb y arriba. El código falla bien para cualquier cosa debajo del nido de abeja. MyCustomDialog
es simplemente Theme.Dialog
para <API-11 y Theme.Holo.Dialog
para API-11 y Theme.Holo.Dialog
posteriores.
- ¿Alguna idea de por qué estoy obteniendo el fondo extra?
- ¿Alguna idea de por qué se bloquea para API <11? Funciona bien si elimino el tema.
Actualización descubrió la respuesta a la pregunta # 2. Parece que el constructor AlertDialog.Builder(Context context, int theme)
fue introducido en la API 11. Mi solución fue simplemente cambiar la línea a:
- Mensajes androide logcat invisibles en eclipse
- Intentando probar SQLiteOpenHelper pero getWritableDatabase () lanza Null
- Compruebe si DAY_OF_WEEK es entre el lunes y el viernes
- Cómo crear una nueva línea entre dateformat
- Android recibe texto de html
final AlertDialog.Builder builder = (Integer.parseInt(android.os.Build.VERSION.SDK) < 11)? new AlertDialog.Builder(this) : new AlertDialog.Builder(this,R.style.JumpDialog);
Todavía necesito ayuda con la pregunta # 1
private Dialog setupKeyBoardDialog() { if (mContact.getLocaleId() != -1) { final AlertDialog.Builder builder = new AlertDialog.Builder(this,R.style.MyCustomDialog); builder.setTitle("Keyboards"); mKeyboardLayouts = new KeyboardLayoutGroup(); mKeyboardLayouts.layoutNames = new CharSequence[(int) jni.getNumKeyLayouts()]; mKeyboardLayouts.layoutValue = new ArrayList<Integer>(); for (int i = 0; i < jni.getNumKeyLayouts(); i++) { mKeyboardLayouts.layoutNames[i] = jni.LayoutInfoForIndex(i).getName(); mKeyboardLayouts.layoutValue.add(i, (int) jni.LayoutInfoForIndex(i).getLocale_id()); } final int selectedItem = mKeyboardLayouts.layoutValue.indexOf(mContact.getLocaleId()); builder.setSingleChoiceItems(mKeyboardLayouts.layoutNames, selectedItem, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int item) { mContact.setLocaleId(mKeyboardLayouts.layoutValue.get(item)); mContactsDB.saveContact(mContact, true); dialog.dismiss(); initializeSettingsList(); } }); final AlertDialog dialog = builder.create(); dialog.setButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogBox, int arg1) { dialogBox.cancel(); } }); return dialog; } return null; }
- Org.json.JSONException: Cadena no terminada en el carácter 1834
- Máscara Libgdx con imagen
- ¿Cómo establecer el límite de los elementos coincidentes devueltos por DynamoDB utilizando Java?
- GetText (). ToString () vs (String) getText ()
- Cómo convertir HashMap a json Array en android?
- Cómo amortiguar solamente la última emisión de rx.Observable durante contrapresión
- IllegalArgumentException: columna no válida
- ¿Cómo puedo poner títulos en ViewPager usando fragmentos?
Calculó las respuestas
- AlertDialog lo tiene en constantes estáticas para cada tema en la clase AlertDialog y no toma el tema estándar. Cuando reemplazé
R.style.MyTheme
oandroid.R.style.Theme_Holo_Dialog
conAlertDialog.THEME_HOLO_LIGHT
el código funcionó bien. -
Parece que el constructor
AlertDialog.Builder(Context context, int theme)
fue introducido en la API 11. Mi solución fue simplemente cambiar la línea a:final AlertDialog.Builder builder; if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { builder = new AlertDialog.Builder(this); } else { builder = new AlertDialog.Builder(this,R.style.JumpDialog); }
Usted puede intentar utilizar new AlertDialog.Builder(new ContextThemeWrapper(this, R.style.JumpDialog))
vez de new AlertDialog.Builder(this, R.style.JumpDialog)
Para aquellos que buscan una manera de personalizar el tema del diálogo sin tener que quedarse con los predeterminados (como en la solución aceptada), a partir de Lollipop parece que el fondo extra se ha eliminado finalmente. Por lo tanto, ahora puede crear un tema que hereda del predeterminado (ejemplo con AppCompat):
<!-- default theme for L devices --> <style name="SelectionDialog" parent="Theme.AppCompat.Light.Dialog"> <item name="android:textColor">@color/default_text_color_holo_light</item> </style> <!-- theme for Pre-L devices --> <style name="SelectionDialog.PreL"> <!-- remove the dialog window background --> <item name="android:windowBackground">@color/transparent</item> </style>
Y instancia de su constructor con este código:
AlertDialog.Builder builder = new AlertDialog.Builder( getActivity(), Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT ? R.style.SelectionDialog : R.style.SelectionDialog_PreL);
Por supuesto esto también podría hacerse con carpetas de recursos ( values/
y values-v21/
).
- Convertidor de gson retrofit para json anidado con diferentes objetos
- Cómo Robolectric trabaja con Volley