Odpowiedzi:
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.
public abstract class AbstractActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
Ta abstrakcyjna aktywność może być również wykorzystana w menu globalnym.
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 jego onCreate()
nazwie, wywoływanej przy pierwszym uruchomieniu aplikacji, rejestrujesz ActivityLifecycleCallbacks
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.
class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
// register to be informed of activities starting up
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity,
Bundle savedInstanceState) {
// new activity created; force its orientation to portrait
activity.setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
....
});
}
}
Możesz to ustawić w pliku manifestu ..
android:name=".your launching activity name"
android:screenOrientation="portrait"
możesz również osiągnąć to samo, pisząc kod w pliku klasy, np .:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Dodaj Androida: screenOrientation = "portrait" do aktywności w AndroidManifest.xml. Na przykład:
<activity android:name=".SomeActivity"
android:label="@string/app_name"
android:screenOrientation="portrait">
Posługiwać się:
android:screenOrientation="portrait"
Po prostu napisz ten wiersz w pliku manifestu aplikacji w każdej aktywności, którą chcesz pokazać tylko w trybie portretowym.
Od przewodnika dla programistów Androida:
„orientacja” Orientacja ekranu zmieniła się - użytkownik obrócił urządzenie. Uwaga: Jeśli aplikacja jest ukierunkowana na interfejs API na poziomie 13 lub wyższym (zgodnie z zadeklarowanymi atrybutami minSdkVersion i targetSdkVersion), należy również zadeklarować konfigurację „screenSize”, ponieważ zmienia się również, gdy urządzenie przełącza się między orientacją pionową i poziomą.
„screenSize” Zmienił się aktualnie dostępny rozmiar ekranu. Oznacza to zmianę aktualnie dostępnego rozmiaru w stosunku do bieżącego współczynnika proporcji, a więc zmieni się, gdy użytkownik przełączy się między widokiem poziomym a pionowym. Jeśli jednak aplikacja jest kierowana na interfejs API na poziomie 12 lub niższym, wówczas aktywność zawsze sama obsługuje tę zmianę konfiguracji (ta zmiana konfiguracji nie powoduje ponownego uruchomienia aktywności, nawet w przypadku systemu Android w wersji 3.2 lub nowszej). Dodano w API 13 poziom.
Tak więc w pliku AndroidManifest.xml możemy umieścić:
<activity
android:name=".activities.role_activity.GeneralViewPagerActivity"
android:label="@string/title_activity_general_view_pager"
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden|screenSize"
>
</activity>
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).
w pliku manifestu, którego działania chcesz użyć w „portrecie” , musisz wpisać ten kod w tagu działania
android:screenOrientation="portrait"
lubię to
android:icon="@drawable/icon"
android:name="com.zemkoapps.hd.wallpaper.AndroidGridLayoutActivity"
android:screenOrientation="portrait" >
ale jeśli chcesz ekran w układzie poziomym, użyj tego kodu w ten sposób
android:screenOrientation="landscape"
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//setting screen orientation locked so it will be acting as potrait
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
}
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:
class InteractiveStoryApplication: Application() {
override fun onCreate() {
super.onCreate()
registerActivityLifecycleCallbacks(object: ActivityLifecycleCallbacks {
override fun onActivityCreated(activity: Activity?, savedInstanceState: Bundle?) {
activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
}
override fun onActivityPaused(activity: Activity?) {
}
override fun onActivityResumed(activity: Activity?) {
}
override fun onActivityDestroyed(activity: Activity?) {
}
override fun onActivitySaveInstanceState(activity: Activity?, outState: Bundle?) {
}
override fun onActivityStarted(activity: Activity?) {
}
override fun onActivityStopped(activity: Activity?) {
}
})
}
}
a następnie musisz dodać swoją wspólną klasę podstawową w AndroidManifest w następujący sposób:
<application android:allowBackup="true"
android:name=".InteractiveStoryApplication"
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
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
I rozszerz tę klasę zamiast AppCompatActivity tam, gdzie chcesz używać trybu Potrait
public class your_activity extends BaseActivity {}
Dla użytkowników Xamarin:
Jeśli rozszerzysz wszystkie swoje działania na BaseActivity
Tylko dodaj:
this.RequestedOrientation = ScreenOrientation.Portrait;
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:
this.Activity.RequestedOrientation = ScreenOrientation.Landscape;
W swoim Manifeście wpisz:
<activity
android:screenOrientation="portrait"
<!--- Rest of your application information ---!>
</activity>