2011-09-30 10 views
15

Sto sviluppando una semplice demo. Qui in questa demo sto creando una semplice finestra di avviso personalizzata. Funziona bene.Errore di visualizzazione della finestra di dialogo degli avvisi personalizzati Android dopo aver modificato la versione della build

Mi mostra il risultato perfetto quando creo l'applicazione in 1.6, ma quando cambio la versione di Android da 1.6 a 2.2, mostra il risultato inaspettato. Non mostra la schermata di sfondo su cui visualizzo la finestra di avviso personalizzata.

Ecco il mio file xml.finestra di dialogo personalizzata a tema File

<?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> 

Qui è il mio CustomConfirmOkDialog Classe

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

Chiamare questa classe dalla mia attività principale usando il codice seguente.

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

enter image description here enter image description here

Qui si può notare chiaramente che 1st image mostra lo sfondo. La sua build nella versione 1.6 di Android mentre 2nd image non mostra lo sfondo. Mostra l'intero schermo nero. La sua build nella versione 2.2 di Android. Sono molto grato se qualcuno può risolvere questo problema.

Qualcuno può aiutarmi a risolvere questo problema semplice e sciocco?

Grazie in anticipo.

+1

Quando si modifica la versione, si intende la versione di destinazione, la versione minima o massima? O vuoi dire semplicemente su un dispositivo diverso che ha una versione più alta? – Gallal

+0

sto parlando della versione di destinazione del progetto. –

+0

commento sciocco ma ho affrontato lo stesso problema quindi ... stai testando la demo in emulatore con sdk 2.2 causa la causa del dispositivo o dell'emulatore a volte la vista non viene mostrata perfettamente quando si esegue l'applicazione di versione superiore all'emulatore o dispositivo di versione inferiore. – MKJParekh

risposta

2

Ha risolto il mio problema modificando il codice seguente nel file xml del tema della finestra di dialogo personalizzata.

<?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

Apparentemente, questo è un known issue.

Questo accade solo quando si tenta ereditando dai temi quadro. L'utilizzo diretto di @android:style continuerà a trattarli come a schermo intero non , che punge lo sfondo nero come previsto.

Una soluzione è quella di iniziare con un tema quasi-vuoto (come pannello o traslucido) e poi il rendering che cosa avete bisogno nel vostro proprio layout (come ad esempio bordi di dialogo, ecc).

Pensato, ancora non capisco ancora pienamente questa soluzione.

E in realtà, non sono più sicuro che stiano parlando dello stesso identico bug che hai visto, dal momento che stanno parlando di questo non funziona per una versione precedente di sdk (non una più nuova come la tua). Vedi lo bug report.

1

Ho anche affrontato lo stesso problema. il problema è quando ho chiamato costruttore della classe Dialog

Dialog (contesto Context, int themeId)

si nasconde l'attività di fondo.L'unica soluzione che ho trovato è non chiamare questo costruttore, invece solo chiamare

Dialog (contesto Context)

e impostare il vostro stile nel file di layout.

Quindi nel tuo codice, solo scrivere

super (contesto)

invece di

super (contesto, themeid);

+1

Non dà il risultato corretto quello che voglio. –

Problemi correlati