Jak to ustawić, aby aplikacja działała tylko w trybie pionowym? Chcę, aby tryb krajobrazu był wyłączony podczas działania aplikacji. Jak to zrobić programowo?
201
Możesz określić android:screenOrientation="portrait"
dla każdego działania w pliku manifest.xml. Nie możesz określić tej opcji w application
tagu.
Inną opcją jest zrobienie tego programowo, na przykład w Activity
klasie bazowej:
@Override
public void onCreate(Bundle savedInstanceState) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
Ostatnią opcją jest zrobienie tego z detektorami cyklu życia aktywności, które są dostępne tylko od Androida 4.0 (API 14+). Wszystko dzieje się w Application
klasie niestandardowej :
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(new ActivityLifecycleAdapter() {
@Override
public void onActivityCreated(Activity a, Bundle savedInstanceState) {
a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
});
}
ActivityLifecycleAdapter
to tylko klasa pomocnicza, którą musisz stworzyć, która będzie pustą implementacją ActivityLifecycleCallbacks
(więc nie musisz zastępować wszystkich metod tego interfejsu, gdy potrzebujesz tylko jednej z nich).
Tak, możesz to zrobić zarówno programowo, jak i dla wszystkich swoich działań, tworząc AbstractActivity, który rozszerza wszystkie twoje działania.
Ta abstrakcyjna aktywność może być również wykorzystana w menu globalnym.
źródło
ActivityInfo.SCREEN_ORIENTATION_NOSENSOR
powinna to być lepsza odpowiedź, ponieważ ma na celu pozostawienie urządzenia w stanie domyślnym, ponieważ niektóre urządzenia nie mają orientacji pionowej. Jednak „nosensor” NIE działa dla mnie, więc odpowiedź @ arcone jest dla mnie odpowiednia.Możesz to zrobić dla całej aplikacji bez konieczności przekształcania wszystkich działań w wspólną klasę bazową.
Sztuczka polega na tym, aby upewnić się, że do
Application
projektu dołączono podklasę. W jegoonCreate()
nazwie, wywoływanej przy pierwszym uruchomieniu aplikacji, rejestrujeszActivityLifecycleCallbacks
obiekt (poziom API 14+), aby otrzymywać powiadomienia o zdarzeniach cyklu życia aktywności.Daje to możliwość wykonania własnego kodu za każdym razem, gdy jakiekolwiek działanie w aplikacji zostanie uruchomione (zatrzymane, wznowione lub cokolwiek innego). W tym momencie możesz wywołać
setRequestedOrientation()
nowo utworzone działanie.źródło
Możesz to ustawić w pliku manifestu ..
możesz również osiągnąć to samo, pisząc kod w pliku klasy, np .:
źródło
Dodaj Androida: screenOrientation = "portrait" do aktywności w AndroidManifest.xml. Na przykład:
źródło
Posługiwać się:
Po prostu napisz ten wiersz w pliku manifestu aplikacji w każdej aktywności, którą chcesz pokazać tylko w trybie portretowym.
źródło
Napisz to do pliku manifestu dla każdej aktywności:
źródło
Od przewodnika dla programistów Androida:
Tak więc w pliku AndroidManifest.xml możemy umieścić:
źródło
Dodanie
<preference name="orientation" value="portrait" />
under<widget>
w moim pliku config.xml działało dla mnie.(Inne rozwiązania albo nie działały na moim urządzeniu, zostały nadpisane podczas kompilacji, albo dawały błędy przestarzałe podczas kompilacji).
źródło
w pliku manifestu, którego działania chcesz użyć w „portrecie” , musisz wpisać ten kod w tagu działania
lubię to
ale jeśli chcesz ekran w układzie poziomym, użyj tego kodu w ten sposób
źródło
źródło
Jeśli ktoś zastanawiał się, jak to zrobić dla całej aplikacji bez konieczności tworzenia wszystkich działań rozszerzających wspólną klasę bazową w Kotlin , zobacz poniższy przykład:
a następnie musisz dodać swoją wspólną klasę podstawową w AndroidManifest w następujący sposób:
źródło
Możesz to zrobić na dwa sposoby.
android:screenOrientation="portrait"
plik manifestu do odpowiedniej aktywnościsetRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
do swojej aktywności w metodzie `onCreate ()źródło
Podobnie do odpowiedzi Grahama Borlanda ... ale wydaje się, że nie musisz tworzyć klasy aplikacji, jeśli nie chcesz ... po prostu utwórz działanie podstawowe w swoim projekcie
I rozszerz tę klasę zamiast AppCompatActivity tam, gdzie chcesz używać trybu Potrait
źródło
Dla użytkowników Xamarin:
Jeśli rozszerzysz wszystkie swoje działania na
BaseActivity
Tylko dodaj:To rozwiąże problem. Jeśli chcesz, aby jakieś konkretne działania odbywały się w układzie poziomym, zastąp to w
OnActivityCreated
. Tak jak:źródło
W swoim Manifeście wpisz:
źródło