2012-11-06 20 views
6

Quando eseguo la mia applicazione Android che io chiamo un metodo per verificare se l'applicazione è in esecuzione su una tavoletta con:Impostazione Tema Programmactically cause sfondo nero

public boolean isTablet(Context context){ 
    boolean xlarge = ((context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == 4); 
    boolean large = ((context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK)== Configuration.SCREENLAYOUT_SIZE_MASK); 
    return(xlarge || large); 
} 

se il metodo restituisce true (cioè i soddisfa dispositivo una di queste condizioni)

ho impostato il mio tema ad un tema di dialogo tramite:

setTheme(R.style.MyTheme); 

dove MyTheme è un tema che eredita dal genitore Theme.Holo.Light.Dialog

Questa logica funziona bene tuttavia mi dà uno strano effetto in background. L'intento di chiamata è completamente oscurato, mentre se imposto il tema nel manifesto, lo sfondo è solo leggermente sfumato.

Update - codice aggiunto

private Context mClassContext = this; 
@Override 
public void onCreate(Bundle savedInstanceState){ 
    if(isTablet(mClassContext)){ 
     setTheme(R.style.MyTheme); 
    } 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.myLayout); 
} 

Come faccio a replicare questo?

+0

Si esegue il 'setTheme' prima di' SetContentView() '? – kaderud

+0

sì, dovrei spostarlo dopo questo? Sto postando il mio 'onCreate()' ora –

+0

ho spostato il codice dopo 'setContentView()' e non imposta il mio tema. L'ho provato prima. Se vuoi che il tema sia impostato devi farlo prima di chiamare 'setContentView()'. Non capisco perché lo sfondo diventa completamente oscurato. –

risposta

10

Ho trovato la risposta alla mia domanda.

Per evitare il fondo nero:

Nel Android set manifesta tutte le attività che potrebbero essere le finestre di dialogo (se si tratta di un tablet) al tema finestra di dialogo:

poi nel onCreate add questo altro caso per cambiarlo per dispositivi non tablet (cioè telefoni)

if(isTablet(mContext)){ 
setTheme(R.style.myDialogTheme);} 
else{ 
    setTheme(R.style.MyTheme); 
} 
Problemi correlati