2011-12-12 12 views
28

Basta chiedersi come nascondere i pulsanti del software ICS di back/home/etc a livello di programmazione. Proprio come fanno le app di YouTube durante la riproduzione di un video. Voglio nasconderli mentre un video è in riproduzione, ma portalo su se l'utente tocca lo schermo.Nascondere i pulsanti di scambio attività home back ICS

Non riesco a trovarlo da nessuna parte sul Web o nella documentazione di Google.

risposta

22

cercare di impostare una finestra a schermo intero con la bandiera SYSTEM_UI_FLAG_HIDE_NAVIGATION

+0

È questo necessario chiamare questo in mostra root? – Talha

-1

Si chiama "Lights Out Mode" quando si parla di nelle applicazioni. Non sono riuscito a trovare nulla correlato a ICS ma ecco un collegamento a una discussione a nido d'ape.

where is api call to do lights out mode in honeycomb

+0

Questo li trasforma in piccoli "punti", in realtà non li nasconde (come la già citata app YouTube). –

29

pinxue è spot-on ... vuoi SYSTEM_UI_FLAG_HIDE_NAVIGATION. Esempio:

myView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); 

Una cosa da notare, però, è che su qualsiasi (I ANY e media) interazione con l'utente verrà reshown barra di navigazione.

Con Honeycomb il più vicino possibile ottenere è entrare in modalità "luci spente" (ora chiamato "profilo basso" ... SYSTEM_UI_FLAG_LOW_PROFILE). Questo rende solo gli oggetti sulla barra di navigazione meno visibili (i piccoli "punti" che probabilmente hai visto). Se si vuole fare il meglio che puoi a mantenere la compatibilità con nido d'ape è possibile utilizzare la reflection per utilizzare il metodo "migliore":

// Ask the System Bar to hide 
int whichHiddenStatusToUse = android.view.View.STATUS_BAR_HIDDEN; 
try { 
    // if this next line doesn't thrown an exception then we are on ICS or 
    // above, so we can use the new field. 
    whichHiddenStatusToUse = View.class.getDeclaredField("SYSTEM_UI_FLAG_HIDE_NAVIGATION").getInt(mDrawingSurface); 
} catch (Exception ex) { 
} 
// now lets actually ask one of our views to request the decreased visibility 
myView.setSystemUiVisibility(whichHiddenStatusToUse); 
+7

La risposta è grandiosa. Tuttavia, proverei a evitare la riflessione ogni volta che è possibile. Perché è brutto, come al solito. Vorrei semplicemente controllare la versione corrente della piattaforma e usare una delle costanti. Per esempio. if (Build.VERSION.SDK_INT> = Build.VERSION_CODES.ICE_CREAM_SANDWICH) {...} –

+1

Dove trovare mDrawingSurface? – Nik

6

Volete SYSTEM_UI_FLAG_HIDE_NAVIGATION.

Questa bandiera è stata aggiunta a partire da Ice Cream Sandwich, API 14. Prima di 14 una bandiera STATUS_BAR_HIDDEN è stata aggiunta in Honeycomb, API 11. Precedentemente i pulsanti di navigazione non esistevano, quindi le modalità a schermo intero erano gestite interamente da Themes (in particolare Theme.NoTitleBar.Fullscreen).

Usa:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) 
    mBaseLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); 
else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) 
    mBaseLayout.setSystemUiVisibility(View.STATUS_BAR_HIDDEN); 
0

Questa risposta non può essere rispondere direttamente alla domanda. ma lo sto postando per aiutare gli altri a risparmiare tempo.

Avevo bisogno di nascondere completamente la barra di navigazione. Anche quando l'utente fa clic sullo schermo, dovrebbe rimanere nascosto.

Niente di quanto sopra ha funzionato per me.

Ho scritto una lezione dopo un paio di giorni di googling su questo argomento molto tempo fa. Finisco in questa classe.

UtilsTaskBar.java

non ho potuto testarlo in tutto il mondo, ma funziona su 4 **

NOTA:. Ho usato questa classe in numerose applicazioni speciali, che non è per gli utenti tipici.

Se si nasconde la barra di navigazione con questa classe, non verrà più visualizzata finché non si riavvia il dispositivo o lo si mostra di nuovo con la stessa classe.

Quindi usatelo solo se ne avete davvero bisogno.

+0

Non ha funzionato nell'API 23 – yshahak

+0

@yshahak richiede il permesso di root per eseguire tali funzioni, e non l'ho testato su api23 o superiore, grazie per l'informazione. – MBH

+0

Beh, non hai parlato di rooting ... È una storia diversa allora. – yshahak

0

in AndroidManifest.xml aggiungere questo:

<uses-permission android:name="android.permission.BROADCAST_STICKY"/> 

quindi è possibile utilizzare questa funzione per mostrare e nascondere la casa/ritorno navigazione bar

private void changeSystemBarVisibilty(boolean show) 
{ 
    Context context = getApplicationContext(); 
    final Intent intent = new Intent("android.intent.action.SYSTEM_BAR_VISIBILITY"); 
    intent.putExtra("show", show); 
    context.sendStickyBroadcast(intent); 
} 
Problemi correlati