2011-09-30 17 views
15

Estoy desarrollando una demostración simple. Aquí en esta demostración, solo estoy creando un diálogo de alerta personalizado simple. Funciona bien.Diálogo de alerta personalizada de Android Pantalla Error después de cambiar la versión de compilación

Me muestra el resultado perfecto cuando construyo la aplicación en 1.6, pero cuando cambio la versión de Android de 1.6 a 2.2, muestra el resultado inesperado. No muestra la pantalla de fondo en la que muestro el cuadro de diálogo de alerta personalizado.

Aquí está mi archivo xml.diálogo personalizado archivo de tema

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="CustomDialogTheme" parent="@android:style/AlertDialog"> 
     <item name="android:windowFrame">@null</item> 
     <item name="android:windowContentOverlay">@null</item> 
     <item name="android:backgroundDimEnabled">true</item> 
     <item name="android:windowIsTranslucent">true</item> 
     <item name="android:windowNoTitle">true</item> 
     <item name="android:windowAnimationStyle">@android:style/Theme.Dialog</item> 
    </style> 
</resources> 

Aquí está mi CustomConfirmOkDialog Clase

package com.utility.org; 

import android.app.Activity; 
import android.app.Dialog; 
import android.view.View; 
import android.view.Window; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 

    public class CustomConfirmOkDialog extends Dialog implements OnClickListener 
    { 
     private Button okButton = null; 
     private TextView infoText=null,confirmBody=null; 
     private int errorMessage=0; 
     @SuppressWarnings("unused") 
     private Activity activity; 

     public CustomConfirmOkDialog(Activity context,int customdialogtheme,int errorMessage) 
     { 
      super(context,customdialogtheme); 
      requestWindowFeature(Window.FEATURE_NO_TITLE); 
      setContentView(R.layout.confirm_ok); 
      this.errorMessage = errorMessage; 
      this.activity = context; 
      initControls(); 
     } 

     private void initControls() 
     { 
      okButton = (Button) findViewById(R.id.ok_button); 
      okButton.setOnClickListener(this); 

      infoText = (TextView)findViewById(R.id.infoText); 
      confirmBody = (TextView)findViewById(R.id.confirmBody); 

      switch (this.errorMessage) 
      { 

       case Utility.INVALID_USERNAME_PASSWORD: 
        try 
        { 
         infoText.setText(R.string.signIn); 
         confirmBody.setText(R.string.invalidUsernameAndPassword); 
        } 
        catch (Exception e) 
        { 
         e.printStackTrace(); 
        } 
        break; 


       default: 
        break; 
      } 
     } 
     public void onClick(View v) 
     { 
      dismiss(); 
     } 
    } 

Calling esta clase de mi actividad principal utilizando el código de abajo.

CustomConfirmOkDialog dialog = new CustomConfirmOkDialog(MainActivity.this, R.style.CustomDialogTheme, Utility.INVALID_USERNAME_PASSWORD); 
dialog.show(); 

enter image description here enter image description here

Aquí se puede notar claramente que 1st image muestra el fondo. Su versión en Android 1.6 mientras que 2nd image no muestra el fondo. Muestra toda la pantalla negra. Su construcción en la versión de Android 2.2. Estoy muy agradecido si alguien puede resolver este problema.

¿Alguien me puede ayudar a resolver este simple y tonto problema?

Gracias de antemano.

+1

Cuando dices cambiar la versión, ¿te refieres a la versión de destino, versión mínima o versión máxima? ¿O simplemente te refieres a un dispositivo diferente que tiene una versión más alta? – Gallal

+0

estoy hablando de la versión de destino de compilación del proyecto. –

+0

comentario tonto pero me he enfrentado al mismo problema así que ... ¿está probando la demostración en emulador con sdk 2.2 porque el dispositivo o emulador a veces hace que la vista no se muestre perfectamente cuando se ejecuta la versión superior de la aplicación para bajar la versión del emulador o dispositivo. – MKJParekh

Respuesta

2

Resolvió mi problema cambiando el siguiente código en Custom Dialog Theme xml file.

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="CustomDialogTheme" parent="@android:style/Theme.Translucent.NoTitleBar"> 
     <item name="android:windowFrame">@null</item> 
     <item name="android:windowContentOverlay">@null</item> 
     <item name="android:backgroundDimEnabled">true</item> 
     <item name="android:windowIsTranslucent">true</item> 
     <item name="android:windowNoTitle">true</item> 
    </style> 
</resources> 
0

Aparentemente, este es un known issue.

Esto solo ocurre cuando intenta heredando de los temas del marco. El uso de @android:style directamente los tratará como no- a pantalla completa, que perfora el fondo negro como se esperaba.

Una solución consiste en comenzar con un tema casi vacío (como Panel o Translúcido) y luego renderizar lo que necesita en su propio diseño (como bordes de diálogo, etc.).

Pensé, todavía no entiendo totalmente esta solución por mi cuenta.

Y en realidad, ya no estoy seguro de que estén hablando del mismo error que ha visto, ya que están hablando de que no funciona para una versión anterior de la SDK (no una más nueva como la suya)) Vea el bug report.

1

También me enfrenté al mismo problema. el problema es cuando me llamó el constructor de la clase de diálogo

de diálogo (contexto Contexto, int themeId)

se ocultará la actividad de fondo.La única solución que he encontrado es no llamar a este constructor, en lugar solamente llamar

de diálogo (contexto Contexto)

y establecer su estilo en el archivo de diseño.

Así que en su código, solamente escribir

super (contexto)

en lugar de

super (contexto, themeid);

+1

No da el resultado correcto lo que quiero. –

Cuestiones relacionadas