Ho un ViewPager e FragmentPagerAdapter impostati in un'unica attività con 3 frammenti. Tutti i frammenti sono caricati simultaneamente e sono tenuti in memoria utilizzandoImposta a schermo intero i frammenti a livello di codice
mPager.setOffscreenPageLimit(2);
Uno di questi frammenti ospita un'anteprima fotocamera che vorrei fare a schermo intero, senza barra di stato o barra delle operazioni. Gli altri frammenti richiedono che venga visualizzata la barra delle azioni.
Come faccio a rendere solo il frammento di anteprima della telecamera a schermo intero mantenendo gli altri due frammenti normali? Ho provato a usare temi, il che significa rompere la barra delle azioni.
programmazione chiamando il seguente non aiuta, perché costringe l'intera attività di essere a schermo intero (e quindi le altre due frammenti con essa):
requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.main);
Ho anche provato attuazione ViewPager.OnPageChangeListener:
public void onPageSelected(int position) {
if(position == 1)
getActionBar().hide();
else
getActionBar().show();
}
Ciò non nascondere la barra delle azioni, ma non nasconde la barra di stato del sistema (sto parlando in cui le notifiche, icone di stato, e il tempo sono), e la barra delle azioni nascondi/mostra di animazione è anche molto mosso durante lo scorrimento.
Per un esempio di ciò che voglio fare esattamente, vedere Snapchat: riescono a rimuovere perfettamente lo scorrimento tra fotocamera e altri frammenti.
Edit:
Così ho cambiato il mio onPageSelected a questo:
public void onPageSelected(int position) {
if(position == 1) {
MainActivity.this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
MainActivity.this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
} else {
MainActivity.this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
MainActivity.this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
}
}
Questo mi permette di cambiare se la barra di stato viene visualizzato o meno. Tuttavia, provoca una grande quantità di jank. Lo stesso problema con la barra delle azioni.
Ho notato che in Snapchat la barra di stato scorre su e giù dopo che il cambio di tabulazione è stato completato. Non sono sicuro di come implementarlo, quindi qualsiasi consiglio su questo aspetto sarebbe apprezzato.
Ho provato una versione modificata di questo, che aiuta ad eliminare la barra di stato, ma è un po 'assurda –
Inoltre, ho appena realizzato che questo probabilmente causerebbe crash app se il frammento è stato scaricato dalla memoria a causa di una pagina scorrere o se è mai stato distrutto e ricreato, ad esempio da un cambiamento di orientamento. Dovresti recuperare un riferimento al frammento usando findFragmentById(), poiché il vecchio riferimento non sarebbe valido –
cos'è 'mActionBar'? –