Come posso disabilitare la modalità orizzontale per alcune visualizzazioni nella mia app Android?
Come posso disabilitare la modalità orizzontale per alcune visualizzazioni nella mia app Android?
Risposte:
Aggiungi android:screenOrientation="portrait"
all'attività in AndroidManifest.xml. Per esempio:
<activity android:name=".SomeActivity"
android:label="@string/app_name"
android:screenOrientation="portrait" />
EDIT: Dal momento che questa è diventata una risposta molto popolare, mi sento in colpa perché forzare il ritratto è raramente la soluzione giusta ai problemi a cui viene frequentemente applicato.
I principali avvertimenti con ritratto forzato:
retainInstance
frammenti.Quindi la maggior parte delle app dovrebbe lasciare che i sensori del telefono, il software e la configurazione fisica prendano la propria decisione su come l'utente desidera interagire con la tua app. Alcuni casi a cui potresti voler pensare, tuttavia, se non sei soddisfatto del comportamento predefinito sensor
dell'orientamento nel tuo caso d'uso:
nosensor
per l'orientamento. Questo costringe il panorama sulla maggior parte dei tablet e in verticale sulla maggior parte dei telefoni, ma ancora non lo consiglierei per la maggior parte delle app "normali" (ad alcuni utenti piace solo digitare la softkey orizzontale sui loro telefoni e molti utenti di tablet leggono in verticale - e dovresti lasciarli).sensorPortrait
potrebbe essere migliore rispetto portrait
ad Android 2.3+; questo consente un ritratto capovolto, che è abbastanza comune nell'uso dei tablet.Non ero a conoscenza del AndroidManifest.xml
cambio di file fino alla lettura di questo post, quindi nelle mie app l'ho usato invece:
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); // Fixed Portrait orientation
Aggiungi questo android:screenOrientation="portrait"
nel tuo file manifest in cui dichiari la tua attività in questo modo
<activity android:name=".yourActivity"
....
android:screenOrientation="portrait" />
Se vuoi usare il codice java, prova
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
prima di chiamare il setContentView
metodo per la tua attività in onCreate()
.
Spero che questo aiuto e facilmente comprensibile per tutti ...
Molte delle risposte qui suggeriscono di usare "portrait"
nel tuo file AndroidManifest.xml. Questa potrebbe sembrare una buona soluzione, ma come notato nella documentazione, stai individuando dispositivi che potrebbero avere solo un panorama. Stai anche forzando alcuni dispositivi (che funzionano meglio in orizzontale) per andare in verticale, senza ottenere l'orientamento corretto.
Il mio suggerimento è di utilizzare "nosensor"
invece. Ciò lascerà il dispositivo a utilizzare il suo orientamento preferito predefinito, non bloccherà alcun acquisto / download su Google Play e garantirà che il sensore non rovini il tuo gioco (nel mio caso NDK).
Se vuoi le impostazioni utente,
allora consiglierei setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
È possibile modificare le impostazioni da un menu delle impostazioni.
Lo richiedo perché i miei timer devono corrispondere a ciò che è sullo schermo e la rotazione dello schermo distruggerà l'attività corrente.
Aggiungi Like this Line in Your Manifest
Android: screenOrientation = "ritratto"
<manifest
package="com.example.speedtest"
android:versionCode="1"
android:versionName="1.0" >
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="ComparisionActivity"
android:label="@string/app_name"
android:screenOrientation="portrait" >
</activity>
</application>
</manifest>
Puoi farlo per l'intera applicazione senza dover estendere tutte le tue attività a una classe base comune.
Il trucco è innanzitutto assicurarsi di includere una sottoclasse dell'applicazione nel progetto. Nel suo onCreate (), chiamato quando la tua app viene avviata per la prima volta, registri un oggetto ActivityLifecycleCallbacks (livello API 14+) per ricevere notifiche sugli eventi del ciclo di vita delle attività.
Ciò ti dà la possibilità di eseguire il tuo codice ogni volta che viene avviata (o interrotta, ripresa o ripresa) qualsiasi attività nella tua app. A questo punto puoi chiamare setRequestedOrientation () sull'attività appena creata.
E non dimenticare di aggiungere l'app: name = ". MyApp" nel tuo file manifest.
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);
}
....
});
}
}
Usalo in onCreate () dell'Attività
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
È necessario modificare android:screenOrientation="sensorPortrait"
in AndroidManifest.xml
Aggiungi questo attributo nel tag attività.
android:screenOrientation="portrait"
Se non vuoi passare attraverso la seccatura di aggiungere meglio l'orientamento in ciascuna voce manifest dell'attività, crea una classe BaseActivity (eredita 'Activity' o 'AppCompatActivity') che sarà ereditata da ogni attività della tua applicazione anziché da 'Activity 'o' AppCompatActivity 'e aggiungi semplicemente il seguente pezzo di codice in BaseActivity:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
// rest of your code......
}
Aggiungi android:screenOrientation="portrait"
all'attività che desideri disabilitare la modalità orizzontale.
Se vuoi disabilitare Landscape mode for your android app
(o una singola attività) devi solo aggiungere,
android:screenOrientation="portrait"
al tag attività nel AndroidManifest.xml
file.
Piace:
<activity android:name="YourActivityName"
android:icon="@drawable/ic_launcher"
android:label="Your App Name"
android:screenOrientation="portrait">
Un altro modo, approccio programmatico.
Se vuoi farlo programmaticamente, ad es. usando il codice Java. È possibile farlo aggiungendo il codice seguente nella classe Java dell'attività che non si desidera visualizzare in modalità orizzontale.
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Spero che ti aiuti. Per maggiori dettagli puoi visitare qui inserisci la descrizione del link qui
android:screenOrientation="nosensor">
Come modificare l'orientamento in alcune viste
Invece di bloccare l'orientamento dell'intera attività è possibile utilizzare questa classe per bloccare in modo pragmatico l'orientamento da qualsiasi vista in modo pragmatico: -
Fai la tua vista Orizzontale
OrientationUtils.lockOrientationLandscape(mActivity);
Rendi la tua vista verticale
OrientationUtils.lockOrientationPortrait(mActivity);
Sblocca orientamento
OrientationUtils.unlockOrientation(mActivity);
Classe di orientamento
import android.app.Activity;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.os.Build;
import android.view.Surface;
import android.view.WindowManager;
/* * This class is used to lock orientation of android app in nay android devices
*/
public class OrientationUtils {
private OrientationUtils() {
}
/** Locks the device window in landscape mode. */
public static void lockOrientationLandscape(Activity activity) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
}
/** Locks the device window in portrait mode. */
public static void lockOrientationPortrait(Activity activity) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
/** Locks the device window in actual screen mode. */
public static void lockOrientation(Activity activity) {
final int orientation = activity.getResources().getConfiguration().orientation;
final int rotation = ((WindowManager) activity.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay()
.getRotation();
// Copied from Android docs, since we don't have these values in Froyo
// 2.2
int SCREEN_ORIENTATION_REVERSE_LANDSCAPE = 8;
int SCREEN_ORIENTATION_REVERSE_PORTRAIT = 9;
// Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO
if (!(Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO)) {
SCREEN_ORIENTATION_REVERSE_LANDSCAPE = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
SCREEN_ORIENTATION_REVERSE_PORTRAIT = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
}
if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90) {
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
} else if (rotation == Surface.ROTATION_180 || rotation == Surface.ROTATION_270) {
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_PORTRAIT);
} else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
}
}
}
/** Unlocks the device window in user defined screen mode. */
public static void unlockOrientation(Activity activity) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);
}
}
È necessario impostare l'orientamento di ciascuna attività.
<activity
android:name="com.example.SplashScreen2"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Black.NoTitleBar" >
</activity>
<activity
android:name="com.example.Registration"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Black.NoTitleBar" >
</activity>
<activity
android:name="com.example.Verification"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Black.NoTitleBar" >
</activity>
<activity
android:name="com.example.WelcomeAlmostDone"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Black.NoTitleBar" >
</activity>
<activity
android:name="com.example.PasswordRegistration"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Black.NoTitleBar" >
</activity>
Se si utilizza Xamarin C # alcune di queste soluzioni non funzioneranno. Ecco la soluzione che ho trovato funzionare.
[Activity(MainLauncher = true, Icon = "@drawable/icon", ScreenOrientation = ScreenOrientation.Portrait)]
Al di sopra della classe funziona bene, simile alle altre soluzioni, anche non applicabile a livello globale e deve essere inserito in ogni intestazione di attività.
Puoi forzare la tua particolare attività a rimanere sempre in modalità ritratto scrivendo questo nel tuo manifest.xml
<activity android:name=".MainActivity"
android:screenOrientation="portrait"></activity>
Puoi anche forzare la tua attività a rimanere in modalità postrait scrivendo la seguente riga nel metodo onCreate () della tua attività
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
<android . . . >
. . .
<manifest . . . >
. . .
<application>
<activity android:name=".MyActivity"
android:screenOrientation="portrait"
android:configChanges="keyboardHidden|orientation">
</activity>
</application>
</manifest>
</android>
Aggiungi di seguito encomia il tuo progetto,
npm install
npm reagisco-nativo-orientamento-armadietto
quindi usi la classe manifest come, React_Native (cartella del tuo progetto) / android / app / src / main / AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<application
android:name=".MainApplication"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:allowBackup="false"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:screenOrientation="landscape"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
</application>
Grazie!
Nella <apphome>/platform/android
directory creata AndroidManifest.xml
(copiandola da quella generata). Quindi aggiungere android:screenOrientation=
" portrait
" a TUTTI gli elementi dell'attività.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="in.co.nurture.bajajfinserv">
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity" android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
possiamo limitare l'attività in modalità verticale o orizzontale utilizzando l'attributo o android: screenOrientation.
se abbiamo più di un'attività nel mio programma, allora hai la libertà di limitare qualsiasi attività in una qualsiasi modalità e ciò non avrà mai effetto sulle altre che non vuoi.
O in classe manifest.
<activity android:name=".yourActivity"
....
android:screenOrientation="portrait" />
o programmaticamente
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Nota: dovresti chiamare questo setContentView
metodo prima della tua attività in onCreate()
.
Aggiungi android:screenOrientation="portrait"
nel file AndroidManifest.xml .
Per esempio :
<activity android:name=".MapScreen"
android:screenOrientation="portrait"></activity>
Nella speranza di aiutare qualcun altro, il seguente attributo su ACTIVITY in AndroidManifest.xml è tutto ciò che serve:
android: configChanges = "orientamento"
Quindi, nodo di attività completo:
<activity android:name="Activity1"
android:icon="@drawable/icon"
android:label="App Name"
android:configChanges="orientation">
Ha funzionato per me, prova ad aggiungere questo codice nel file AndroidManifest
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:screenOrientation="portrait"
android:theme="@style/AppTheme">
....
....
</application>
Mettilo nel tuo manifest.
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:screenOrientation="sensorPortrait" />
L'orientamento sarà verticale, ma se il telefono dell'utente è capovolto, mostra anche il modo corretto. (Quindi lo schermo ruoterà di 180 gradi).
Il sistema ignora questo attributo se l'attività è in esecuzione in modalità multifinestra .
se la tua attività è correlata al primo stato di orientamento del dispositivo, ottieni l'orientamento attuale del dispositivo nel onCreate
metodo e correggilo per sempre:
int deviceRotation = ((WindowManager) getBaseContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getOrientation();
if(deviceRotation == Surface.ROTATION_0) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
else if(deviceRotation == Surface.ROTATION_180)
{
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
}
else if(deviceRotation == Surface.ROTATION_90)
{
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
else if(deviceRotation == Surface.ROTATION_270)
{
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
}