Risposte:
È possibile specificare android:screenOrientation="portrait"
per ogni attività nel file manifest.xml. Non è possibile specificare questa opzione suapplication
tag.
Un'altra opzione è farlo a livello di Activity
codice , ad esempio in una classe base:
@Override
public void onCreate(Bundle savedInstanceState) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
L'ultima opzione è farlo con i listener del ciclo di vita delle attività, disponibili solo da Android 4.0 (API 14+). Tutto accade in una Application
classe personalizzata :
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(new ActivityLifecycleAdapter() {
@Override
public void onActivityCreated(Activity a, Bundle savedInstanceState) {
a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
});
}
ActivityLifecycleAdapter
è solo una classe di supporto che dovrai creare, che sarà un'implementazione vuota di ActivityLifecycleCallbacks
(quindi non devi sovrascrivere tutti i metodi dell'interfaccia quando ne hai semplicemente bisogno).
Sì, puoi farlo sia a livello di programmazione che per tutte le tue attività creando un'Attività astratta che estende tutte le tue attività.
public abstract class AbstractActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
Questa attività astratta può essere utilizzata anche per un menu globale.
ActivityInfo.SCREEN_ORIENTATION_NOSENSOR
dovrebbe essere la risposta migliore perché ha lo scopo di lasciare il dispositivo nello stato predefinito perché alcuni dispositivi non hanno un orientamento verticale. Tuttavia, 'nosensor' NON funziona per me, quindi la risposta di @ arcone è valida per me.
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 Application
sottoclasse nel progetto. Nel suo onCreate()
, chiamato quando la tua app si avvia per la prima volta, registri unActivityLifecycleCallbacks
oggetto (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()
l'attività appena creata.
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);
}
....
});
}
}
Puoi impostarlo nel tuo file manifest.
android:name=".your launching activity name"
android:screenOrientation="portrait"
e puoi anche ottenere lo stesso scrivendo il codice nel tuo file di classe come:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Aggiungi android: screenOrientation = "portrait" all'attività in AndroidManifest.xml. Per esempio:
<activity android:name=".SomeActivity"
android:label="@string/app_name"
android:screenOrientation="portrait">
Uso:
android:screenOrientation="portrait"
Basta scrivere questa riga nel file manifest dell'applicazione in ogni attività che si desidera mostrare solo in modalità verticale.
A partire dalla guida per sviluppatori Android:
"orientamento" L'orientamento dello schermo è cambiato: l'utente ha ruotato il dispositivo. Nota: se l'applicazione è indirizzata al livello API 13 o superiore (come dichiarato dagli attributi minSdkVersion e targetSdkVersion), è necessario dichiarare anche la configurazione "screenSize", poiché cambia anche quando un dispositivo passa da orientamento verticale a orizzontale.
"screenSize" Le dimensioni dello schermo attualmente disponibili sono cambiate. Ciò rappresenta una modifica delle dimensioni attualmente disponibili, rispetto alle proporzioni correnti, quindi cambierà quando l'utente passa da orizzontale a verticale. Tuttavia, se l'applicazione ha come target API livello 12 o inferiore, la tua attività gestisce sempre questa modifica della configurazione stessa (questa modifica della configurazione non riavvia la tua attività, anche quando è in esecuzione su un dispositivo Android 3.2 o versione successiva). Aggiunto nel livello API 13.
Quindi, nel file AndroidManifest.xml, possiamo mettere:
<activity
android:name=".activities.role_activity.GeneralViewPagerActivity"
android:label="@string/title_activity_general_view_pager"
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden|screenSize"
>
</activity>
Aggiungendo <preference name="orientation" value="portrait" />
sotto<widget>
nel mio config.xml ha funzionato per me.
(Le altre soluzioni o non hanno funzionato sul mio dispositivo, sono state sovrascritte durante la creazione o hanno dato errori di deprecazione durante il processo di generazione.)
nel file manifest quale attività si desidera utilizzare in "verticale" è necessario scrivere questo codice nel tag Activity
android:screenOrientation="portrait"
come questo
android:icon="@drawable/icon"
android:name="com.zemkoapps.hd.wallpaper.AndroidGridLayoutActivity"
android:screenOrientation="portrait" >
ma se vuoi lo schermo in orizzontale usa questo codice in questo modo
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);
}
Se qualcuno si chiedeva come poterlo fare per l'intera applicazione senza dover estendere tutte le attività a una classe base comune in Kotlin , vedere l'esempio seguente:
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?) {
}
})
}
}
e quindi devi aggiungere la tua classe base comune in AndroidManifest in questo modo:
<application android:allowBackup="true"
android:name=".InteractiveStoryApplication"
Simile alla risposta Graham Borland ... ma sembra che non sia necessario creare la classe Application se non si desidera ... basta creare un'attività di base nel progetto
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
Estendi questa classe invece di AppCompatActivity dove vuoi usare la modalità Potrait
public class your_activity extends BaseActivity {}
Per gli utenti Xamarin:
Se estendi tutte le tue attività ad un BaseActivity
Aggiungi:
this.RequestedOrientation = ScreenOrientation.Portrait;
Questo risolverà il problema. Se si desidera che una determinata attività sia in orizzontale, ignorarla OnActivityCreated
. Come:
this.Activity.RequestedOrientation = ScreenOrientation.Landscape;
Nel tuo manifest digitare questo:
<activity
android:screenOrientation="portrait"
<!--- Rest of your application information ---!>
</activity>