J'essaie de forcer le mode "portrait" pour mon application car mon application n'est absolument pas conçue pour le mode "paysage".
Après avoir lu certains forums, j'ai ajouté ces lignes dans mon fichier manifeste:
<application
Android:debuggable="true"
Android:icon="@drawable/icon"
Android:label="@string/app_name"
Android:screenOrientation="portrait">
Mais cela ne fonctionne pas sur mon appareil (HTC Desire). Il passe de "portrait" à "paysage", en ignorant les lignes du fichier manifeste.
Après avoir lu plus de forums, j'ai essayé d'ajouter ceci dans mon fichier manifeste:
<application
Android:debuggable="true"
Android:icon="@drawable/icon"
Android:label="@string/app_name"
Android:configChanges="orientation"
Android:screenOrientation="portrait">
et cette fonction dans ma classe d'activité:
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
Mais encore une fois, pas de chance.
N'appliquez pas l'orientation à l'élément application, vous devez plutôt appliquer l'attribut à l'élément activité, et vous devez également définir configChanges
comme indiqué ci-dessous.
Exemple:
<activity
Android:screenOrientation="portrait"
Android:configChanges="orientation|keyboardHidden">
</activity>
Ceci est appliqué dans le fichier manifeste AndroidManifest.xml
.
Notez que
Android:screenOrientation="portrait"
Android:configChanges="orientation|keyboardHidden"
est ajouté dans le fichier manifeste - où l'activité est définie.
Je pense que Android:screenOrientation="portrait"
peut être utilisé pour des activités individuelles. Utilisez donc cet attribut dans la balise <activity>
comme ceci:
<activity Android:name=".<Activity Name>"
Android:label="@string/app_name"
Android:screenOrientation="portrait">
...
</activity>
Si vous rencontrez beaucoup d'activités comme la mienne, dans votre application ou si vous ne voulez pas entrer le code de chaque balise d'activité dans le manifeste, vous pouvez le faire.
dans votre classe Application Base, vous recevrez un rappel du cycle de vie
donc, fondamentalement, ce qui se passe dans chaque activité lors de la création de la création dans Application Class est déclenché ici, c'est le code ..
public class MyApplication extends Application{
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle bundle) {
activity.setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
// for each activity this function is called and so it is set to portrait mode
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
});
}
j'espère que ça aide.
Réglez forcer le mode Portrait ou Paysage, Ajouter des lignes, respectivement.
Importer en dessous de la ligne:
import Android.content.pm.ActivityInfo;
Ajouter la ligne ci-dessous juste au-dessus de setContentView(R.layout.activity_main);
Pour Portrait:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//Set Portrait
Pour Landscap:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//Set Landscape
Cela fonctionnera certainement.
Selon la documentation d'Android, vous devez également souvent inclure screenSize
en tant que modification possible de la configuration.
Android:configChanges="orientation|screenSize"
Si votre application cible une API de niveau 13 ou supérieur (comme indiqué par les attributs minSdkVersion et targetSdkVersion), vous devez également déclarer la configuration "screenSize", car elle change également lorsqu'un périphérique bascule entre les orientations portrait et paysage.
De même, si vous incluez tous la valeur keyboardHidden
dans vos exemples, ne devriez-vous pas alors également considérer locale
, mcc
, fontScale
, keyboard
et autres ?. .
J'ai eu cette ligne dans mon AndroidManifest.xml
<activity
Android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
Android:label="@string/app_name" Android:name="Project Name"
Android:theme="@Android:style/Theme.Black.NoTitleBar">
Ce que j'ai changé en (vient d'ajouter Android:screenOrientation="portrait"
)
<activity
Android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
Android:label="@string/app_name" Android:name="Project Name"
Android:screenOrientation="portrait"
Android:theme="@Android:style/Theme.Black.NoTitleBar">
Cela corrige les choses pour moi.
Quelque chose à compléter: j'ai récemment mis à jour une application, la précédente fonctionnait à la fois en mode paysage et portrait et je souhaitais que la version mise à jour fonctionne en mode portrait. J'ai donc ajouté
Android:screenOrientation="portrait"
à l'activité correspondante, et il vient de planter lorsque j'ai testé la mise à jour. Puis j'ai ajouté
Android:configChanges="orientation|keyboardHidden"
aussi, et ça marche.
Si vous souhaitez prendre en charge différentes orientations dans les constructions debug
et release
, écrivez ainsi (voir https://developer.Android.com/studio/build/gradle-tips#share-properties) -with-the-manifeste ).
Dans build.gradle
de votre dossier app
, écrivez:
Android {
...
buildTypes {
debug {
applicationIdSuffix '.debug'
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
// Creates a placeholder property to use in the manifest.
manifestPlaceholders = [orientation: "fullSensor"]
}
release {
debuggable true
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
// Creates a placeholder property to use in the manifest.
manifestPlaceholders = [orientation: "portrait"]
}
}
}
Ensuite, dans AndroidManifest
, vous pouvez utiliser cette variable "orientation" dans n’importe quel Activity
:
<activity
Android:name=".LoginActivity"
Android:screenOrientation="${orientation}" />
Vous pouvez ajouter Android:configChanges
:
manifestPlaceholders = [configChanges: "", orientation: "fullSensor"]
en débogage et manifestPlaceholders = [configChanges: "keyboardHidden|orientation|screenSize", orientation: "portrait"]
en édition,
<activity
Android:name=".LoginActivity"
Android:configChanges="${configChanges}"
Android:screenOrientation="${orientation}" />
Je pense que vous voulez ajouter Android:configChanges="orientation|keyboardHidden"
à votre activité? Sinon, l'activité est redémarrée sur config-change. La onConfigurationChanged
ne sera pas appelée alors, mais la onCreate