Réponses:
Vous pouvez spécifier android:screenOrientation="portrait"
pour chaque activité dans votre fichier manifest.xml. Vous ne pouvez pas spécifier cette option sur la application
balise.
Une autre option est de le faire par programme, par exemple dans une Activity
classe de base:
@Override
public void onCreate(Bundle savedInstanceState) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
La dernière option est de le faire avec des écouteurs de cycle de vie d'activité qui ne sont disponibles que depuis Android 4.0 (API 14+). Tout se passe dans une Application
classe personnalisée :
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(new ActivityLifecycleAdapter() {
@Override
public void onActivityCreated(Activity a, Bundle savedInstanceState) {
a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
});
}
ActivityLifecycleAdapter
est juste une classe auxiliaire que vous devrez créer et qui sera une implémentation vide de ActivityLifecycleCallbacks
(vous n'avez donc pas à remplacer toutes les méthodes de cette interface lorsque vous en avez simplement besoin).
Oui, vous pouvez le faire à la fois par programme et pour toutes vos activités en créant une activité abstraite que toutes vos activités étendent.
public abstract class AbstractActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
Cette activité abstraite peut également être utilisée pour un menu global.
ActivityInfo.SCREEN_ORIENTATION_NOSENSOR
devrait être la meilleure réponse car il est destiné à laisser l'appareil dans l'état par défaut car certains appareils n'ont pas d'orientation Portrait. Cependant, «nosensor» ne fonctionne PAS pour moi, donc la réponse de @ arcone me correspond.
Vous pouvez le faire pour l'ensemble de votre application sans avoir à faire en sorte que toutes vos activités étendent une classe de base commune.
L'astuce consiste d'abord à vous assurer d'inclure une Application
sous-classe dans votre projet. Dans son onCreate()
, appelé lors du premier démarrage de votre application, vous enregistrez un ActivityLifecycleCallbacks
objet (niveau API 14+) pour recevoir des notifications d'événements de cycle de vie d'activité.
Cela vous donne la possibilité d'exécuter votre propre code chaque fois qu'une activité dans votre application est démarrée (ou arrêtée, ou reprise, ou autre). À ce stade, vous pouvez faire appel setRequestedOrientation()
à l'activité nouvellement créée.
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);
}
....
});
}
}
Vous pouvez définir cela dans votre fichier manifeste.
android:name=".your launching activity name"
android:screenOrientation="portrait"
et vous pouvez également y parvenir en écrivant le code dans votre fichier de classe comme:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Ajoutez android: screenOrientation = "portrait" à l'activité dans AndroidManifest.xml. Par exemple:
<activity android:name=".SomeActivity"
android:label="@string/app_name"
android:screenOrientation="portrait">
Utilisation:
android:screenOrientation="portrait"
Écrivez simplement cette ligne dans le fichier manifeste de votre application dans chaque activité que vous souhaitez afficher en mode portrait uniquement.
À partir du guide du développeur Android:
"orientation" L'orientation de l'écran a changé - l'utilisateur a fait pivoter l'appareil. Remarque: Si votre application cible l'API de niveau 13 ou supérieur (comme déclaré par les attributs minSdkVersion et targetSdkVersion), vous devez également déclarer la configuration "screenSize", car elle change également lorsqu'un appareil bascule entre les orientations portrait et paysage.
"screenSize" La taille d'écran actuellement disponible a changé. Cela représente un changement dans la taille actuellement disponible, par rapport au rapport d'aspect actuel, donc changera lorsque l'utilisateur bascule entre paysage et portrait. Cependant, si votre application cible l'API de niveau 12 ou inférieur, votre activité gère toujours cette modification de configuration elle-même (cette modification de configuration ne redémarre pas votre activité, même lorsqu'elle s'exécute sur un appareil Android 3.2 ou supérieur). Ajouté au niveau API 13.
Ainsi, dans le fichier AndroidManifest.xml, nous pouvons mettre:
<activity
android:name=".activities.role_activity.GeneralViewPagerActivity"
android:label="@string/title_activity_general_view_pager"
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden|screenSize"
>
</activity>
L'ajout de <preference name="orientation" value="portrait" />
sous <widget>
dans mon config.xml a fonctionné pour moi.
(Les autres solutions n'ont pas fonctionné sur mon appareil, ont été écrasées pendant la construction ou ont donné des erreurs de dépréciation pendant le processus de construction.)
dans le fichier manifeste quelle activité vous souhaitez utiliser dans "portrait", vous devez écrire ce code dans la balise d'activité
android:screenOrientation="portrait"
comme ça
android:icon="@drawable/icon"
android:name="com.zemkoapps.hd.wallpaper.AndroidGridLayoutActivity"
android:screenOrientation="portrait" >
mais si vous voulez un écran en paysage, utilisez ce code comme celui-ci
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);
}
Si quelqu'un se demandait comment faire cela pour l'ensemble de votre application sans avoir à faire en sorte que toutes vos activités étendent une classe de base commune dans Kotlin , consultez l'exemple ci-dessous:
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?) {
}
})
}
}
puis vous devez ajouter votre classe de base commune dans AndroidManifest comme ceci:
<application android:allowBackup="true"
android:name=".InteractiveStoryApplication"
Semblable à la réponse de Graham Borland ... mais il semble que vous n'ayez pas à créer de classe d'application si vous ne voulez pas ... créez simplement une activité de base dans votre projet
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
Et étendez cette classe au lieu d'AppCompatActivity où vous souhaitez utiliser le mode Potrait
public class your_activity extends BaseActivity {}
Pour les utilisateurs de Xamarin:
Si vous étendez toutes vos activités à un BaseActivity
simple ajout:
this.RequestedOrientation = ScreenOrientation.Portrait;
Cela résoudra le problème. Si vous souhaitez qu'une activité particulière soit en paysage, remplacez-la OnActivityCreated
. Comme:
this.Activity.RequestedOrientation = ScreenOrientation.Landscape;
Dans votre manifeste, tapez ceci:
<activity
android:screenOrientation="portrait"
<!--- Rest of your application information ---!>
</activity>