2012-10-03 7 views
28

La mia applicazione ha bisogno di essere in modalità verticale così mi sono messo nel manifesto:Impostazione dell'orientamento per solo 1 frammento nella mia attività, mentre il resto è in ritratto

android:screenOrientation="portrait" 

Ma io abbiamo appena aggiunto un altro frammento (FragA) che guarda e funziona 10 volte meglio in orizzontale. C'è qualcosa che posso inserire all'interno della mia FragA per creare quel frammento nel paesaggio mantenendo il resto dell'app in ritratto o facendo ciò dovrò aggiungere qualcosa agli altri frammenti per mantenerli conservati come ritratto?

risposta

11

L'attributo di orientamento è per attività in modo che sia possibile dichiarare l'orientamento solo per l'attività che contiene il frammento in modo che sia in orizzontale e il resto delle attività rimarrà come sono.

+0

così fondamentalmente la mia soluzione migliore sarebbe quella di creare solo un'altra attività e poi nella mia palese che appena messo come: android: screenOrientation = "paesaggio"? –

+0

Sì, questo garantirà che la funzionalità non fallirà mai. –

+0

@DineshVenkata ma non voglio ruotare solo il frammento non attività cosa fare – PriyankaChauhan

74

Utilizzare la seguente riga di codice nel frammento in cui si desidera un orientamento specifico (in questo caso ritratto).

getActivity().setRequestedOrientation(
      ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

Se si vuole avere un orientamento in un frammento, che si basa sul modo in cui l'utente tiene il suo dispositivo, quindi utilizzare la seguente riga di codice.

getActivity().setRequestedOrientation(
       ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); 

Speranza, questo vi darà la soluzione prevista.

+0

Io lo uso nel codice attività appena prima che la transazione frammento venga eseguita. Usarlo all'interno del frammento su Attack()/onStop() non funziona bene. Ho provato su KitKat atm. Correzione – WindRider

+2

: Sembra che il posto migliore per chiamare setRequestedOrientation() sia all'interno di OnBackStackChangedListener dopo aver controllato quale frammento è attualmente attivo. E questo approccio porta a una migliore transizione visiva quando l'attività viene riavviata. – WindRider

+0

Ho funzionato usando queste righe in frammento su onCreateView() –

11

In ciascun frammento, impostare l'orientamento richiesto.

Riferimento doc: http://developer.android.com/reference/android/content/pm/ActivityInfo.html

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // Fragment locked in portrait screen orientation 
    getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  

    // Fragment locked in landscape screen orientation 
    getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

    // Fragment screen orientation normal both portait and landscape  
    getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); 
} 
Problemi correlati