Patrząc na AndroidManifest.xml ( link ), w linii 9:
<activity android:screenOrientation="landscape" android:configChanges="orientation|keyboardHidden" android:name="VncCanvasActivity">
Ta linia określa screenOrientation
jako poziomą, ale autor idzie dalej w nadpisywaniu wszelkich zmian orientacji ekranu za pomocą configChanges="orientation|keyboardHidden"
. Wskazuje to na nadpisaną funkcję w VncCanvasActivity.java.
Jeśli spojrzysz na VncCanvasActivity, w linii 109 jest nadpisana funkcja:
@Override
public void onConfigurationChanged(Configuration newConfig) {
// ignore orientation/keyboard change
super.onConfigurationChanged(newConfig);
}
Autor specjalnie umieścił komentarz, aby zignorować wszelkie zmiany klawiatury lub orientacji.
Jeśli chcesz to zmienić, możesz wrócić do pliku AndroidManifest.xml pokazanego powyżej i zmienić wiersz na:
<activity android:screenOrientation="sensor" android:name="VncCanvasActivity">
Powinno to zmienić program tak, aby przełączał się z trybu pionowego na poziomy, gdy użytkownik obraca urządzenie.
Może to działać, ale może zepsuć wygląd GUI, w zależności od tego, jak utworzono układ. Będziesz musiał to uwzględnić. Ponadto, w zależności od sposobu kodowania działań, można zauważyć, że po zmianie orientacji ekranu wartości, które zostały wprowadzone w dowolnych polach wejściowych, znikają. To również może wymagać załatwienia.
configChanges
atrybut jest potrzebny? Wygląda na to, że działa na moim telefonie bez klawiatury bez niego ... W jakich sytuacjach orientacja zmieni się na portret, jeśli masz,screenOrientation="landscape"
ale pominieszconfigChanges
?If your application targets API level 13 or higher (as declared by the minSdkVersion and targetSdkVersion attributes), then you should also declare the "screenSize" configuration, because it also changes when a device switches between portrait and landscape orientations.
Możesz również ustawić te same dane w swoim kodzie java.
Inne wartości w ActivityInfo pozwolą ci ustawić go z powrotem na portret sterowany czujnikiem lub zablokowany. Osobiście lubię ustawić to na coś w Manifeście, jak sugerowano w innej odpowiedzi na to pytanie, a następnie zmienić to później, używając powyższego wywołania w Android SDK, jeśli zajdzie taka potrzeba.
źródło
If the activity is currently in the foreground or otherwise impacting the screen orientation, the screen will immediately be changed (possibly causing the activity to be restarted)
W moim
OnCreate(Bundle)
generalnie wykonuję następujące czynności:źródło
Możesz określić orientację działania w manifeście. Zobacz tutaj .
źródło
W manifeście:
W Twojej działalności:
źródło
Poniżej znajduje się kod, którego użyłem do wyświetlenia całej aktywności w trybie poziomym:
źródło
Szybkim i prostym rozwiązaniem jest dla pliku AndroidManifest.xml, dodaj następujące informacje dla każdego działania, które chcesz wymusić na trybie poziomym:
źródło
Działa to w przypadku platformy Xamarin.Android. W OnCreate ()
źródło
Otóż to!! Długo czekałem na tę poprawkę.
Mam stary problem z Androidem dotyczący podwójnego uruchamiania działania, które wymagało (programowo) trybu poziomego:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
Teraz Android włącza tryb krajobrazu na starcie.
źródło
Arslanie, dlaczego chcesz wymusić orientację programowo, chociaż jest już sposób na to, by się przekonać
<activity android:name=".youractivityName" android:screenOrientation="portrait" />
źródło
Robienie tego w kodzie jest błędem IMO, a tym bardziej, jeśli umieścisz go w onCreate. Zrób to w manifeście, a „system” rozpozna orientację od uruchomienia aplikacji. I tego typu meta lub „wskazówki” najwyższego poziomu POWINNY znajdować się w manifeście. Jeśli chcesz to sobie udowodnić, zrób sobie przerwę w działaniu onCreate. Jeśli zrobisz to w kodzie, zostanie wywołany dwukrotnie: uruchamia się w trybie portretowym, a następnie przełącza się na poziomo. Tak się nie stanie, jeśli zrobisz to w manifeście.
źródło
W przypadku Androida 4.0 (Ice Cream Sandwich) i nowszych musiałem je dodać, oprócz
landscape
wartości.Używanie
keyboardHidden|orientation
samego tylko nadal powodowałoby wycieki pamięci i odtwarzanie moich czynności po naciśnięciu przycisku zasilania.źródło
orientation|screensize
nie było wystarczające we wszystkich przypadkach. Automatycznie powróciłoby do portretu.Użyj ActivityInfo (android.content.pm.ActivityInfo) w metodzie onCreate przed wywołaniem metody setLayout, takiej jak ta
źródło
używaj tylko
android: screenOrientation = "portrait" tools: ignore = "LockedOrientationActivity"
źródło
Dodaj następujące wiersze do działania
Musisz wejść w każde działanie
do krajobrazu
do portretu
Tutaj przykład MainActivity
źródło
Naciśnij,
CTRL+F11
aby obrócić ekran.źródło