2013-08-22 1 views
7

Nella mia app sto cercando di mostrare uno stato sempre visibile e semi-trasparente, ma sto avendo difficoltà a capire come è fatto.Come si crea un'attività trasparente che può sovrapporsi alla schermata iniziale ma non viene chiusa quando si preme il pulsante home o back?

Facebook Messenger e alcune altre app che ho visto farlo, quindi so che è possibile. Usano l'autorizzazione SYSTEM_ALERT_WINDOW per mostrare un'attività o una finestra per lo più trasparente sempre "on-top".

Ma quello che non capisco è come lo fanno in modo che non vengano chiusi quando viene premuto il pulsante back o home? In altre parole, non sembrano affatto comportarsi come attività, ma non vedo cos'altro potrebbero essere?

Qualsiasi aiuto qui sarebbe molto apprezzato :-)

risposta

14

È possibile creare un'attività trasparente con l'aiuto di

1.Make lo sfondo del layout in file XML trasparente utilizzando

android:background="@android:color/transparent" 

2.E anche, rendere il tema nel file manifest trasparente per quel particolare acitivity

<activity 
     android:name="Your activity" 
     android:label="@string/app_name" 
     android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" > 
    </activity> 

3.And per la stampa ripercorrere giro OnBackPressed() Metodo e rimuovere super.onBackPressed()

@Override 
    public void onBackPressed() 
     { 
     // TODO Auto-generated method stub 
     } 
+0

È inoltre possibile utilizzare il menu o la barra delle azioni per creare questo tipo di vista anziché un'attività. – Meenal

+0

Ciao. Grazie per la tua risposta :-) Purtroppo non riesco a far funzionare il tema - dice solo errore nessuna risorsa trovata ... Il mio min sdk è 8 e il mio obiettivo è 17 se questo fa alcuna differenza. Se cambio il genitore dell'AppBaseTheme predefinito non ci sono errori ma non funziona neanche. –

+0

se puoi fornire il tuo codice o il registro degli errori, sarà molto più utile per me per ottenere il tuo problema. – Meenal

3

È possibile utilizzare il codes..it seguito ha lavorato per me, tranne che non lasciate che le applicazioni da installare dall'archivio interno.

LayoutInflater layoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); 
View oView = layoutInflater.inflate(R.layout.activity_transperant, null); 
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
     WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, 
     0 | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
     PixelFormat.TRANSLUCENT);   
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); 
wm.addView(oView, params);