2015-03-16 10 views
5

Non riesco a capire perché l'attributo "sensorPortrait" in manifest per un'attività non funzioni per consentire all'attività di andare in retromarcia. Ecco come ho impostato in paleseCome abilitare solo il ritratto e il ritratto inverso nei telefoni, "sensorPortrait" non funziona sui telefoni?

<activity 
     android:name=".MainActivty" 
     android:label="Testing" 
     android:screenOrientation="sensorPortrait" 
     android:windowSoftInputMode="stateHidden" 
     android:configChanges="orientation"> 
    </activity> 

Il codice di cui sopra non funziona per me, per ottenere sia reversePortrait e ritratto su Moto E (4.4.4) o Galaxy S3 (4.3), ma posso confermare che funziona su un tablet Nexus 7 (5.0.1), ho provato diverse altre risposte, ma questa sembra essere la più semplice e apparentemente non funziona per me sui "telefoni", mi mancano alcune informazioni rilevanti per far funzionare tutto questo?

Ho provato il seguente link che è altrettanto simile a mia domanda, ma nulla sembra utile riguardo a questa

Activity in portrait or reverse portrait only

Attualmente con il flag "sensorPortrait" si comporta proprio come impostazione "ritratto", nei telefoni .

+0

Ho lo stesso problema su Xperia Z2 e SDK versione 21 in manifest. Non ottengo mai un reversePortrait anche se abilito tutti gli orientamenti. Qual è il tuo targetSdkVersion e minSdkVersion? – Radon8472

+0

In realtà, come nel mio commento prima di ianhanniballake, possiamo avere il ritratto inverso, quando impostiamo la modalità su "fullSensor", l'ho appena testato sul mio Xperia Z2, eseguendo Lollipop 5.1.1, dove ho il mio min sdk come 15 e target sdk come 23. Il loro unico problema è che nel sensore completo ruoterà in tutte le direzioni. –

+0

Hmm, la documentazione dice '** sensorPortrait **: orientamento verticale, ma può essere normale o reverse portrait in base al sensore del dispositivo' Ma su '** fullSensor ** è una nota 'alcuni dispositivi non utilizzeranno normalmente ritratti in retromarcia o in retromarcia, ma ciò consente a quelli ». Quindi la domanda è, come abilitare SOLO il ritratto e il reversePortrait sui dispositivi che normalmente non usano reverve Views. – Radon8472

risposta

1

Se si guarda il numero PhoneWindowManager source code, è possibile vedere che controlla il valore interno config_allowAllRotations e lo utilizza per determinare se è consentita la rotazione di 180 gradi (ad esempio, ritratto inverso sui telefoni).

Con un default value to false, questo significa che il ritratto inverso è disabilitato sui telefoni. Noterai che lo sw600dp value (ad esempio, i tablet) è vero, quindi perché puoi utilizzare tutte le rotazioni, incluso il ritratto inverso, sui dispositivi tablet.

+2

Quello che dici ha senso, ma di nuovo se avessi impostato android: screenOrientation = "fullSensor", il ritratto in retromarcia si verificherà anche nei telefoni. Infatti tutte e 4 le rotazioni avvengono senza problemi per quella particolare modalità di orientamento, quindi cosa pensi che accada lì, ignora qualunque sia il valore interno? –