Ich versuche, den "Hochformat" -Modus für meine Anwendung zu erzwingen, da meine Anwendung absolut nicht für den "Querformat" -Modus konzipiert ist.
Nachdem ich einige Foren gelesen hatte, fügte ich folgende Zeilen in meine Manifest-Datei ein:
<application
Android:debuggable="true"
Android:icon="@drawable/icon"
Android:label="@string/app_name"
Android:screenOrientation="portrait">
Auf meinem Gerät (HTC Desire) funktioniert es jedoch nicht. Es wird von "Hochformat" auf "Querformat" umgeschaltet, wobei die Zeilen aus der Manifestdatei ignoriert werden.
Nachdem ich mehr Foren gelesen hatte, versuchte ich, dies in meine Manifest-Datei aufzunehmen:
<application
Android:debuggable="true"
Android:icon="@drawable/icon"
Android:label="@string/app_name"
Android:configChanges="orientation"
Android:screenOrientation="portrait">
und diese Funktion in meiner Aktivitätsklasse:
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
Aber auch hier kein Glück.
Wenden Sie die Ausrichtung nicht auf das application -Element an, sondern wenden Sie das Attribut auf das activity -Element an. Außerdem müssen Sie configChanges
wie unten angegeben festlegen .
Beispiel:
<activity
Android:screenOrientation="portrait"
Android:configChanges="orientation|keyboardHidden">
</activity>
Dies wird in der Manifestdatei AndroidManifest.xml
Angewendet.
Beachten Sie, dass
Android:screenOrientation="portrait"
Android:configChanges="orientation|keyboardHidden"
wird in die Manifestdatei eingefügt, in der die Aktivität definiert ist.
Ich denke Android:screenOrientation="portrait"
kann für einzelne Aktivitäten verwendet werden. Also benutze dieses Attribut in <activity>
tag like:
<activity Android:name=".<Activity Name>"
Android:label="@string/app_name"
Android:screenOrientation="portrait">
...
</activity>
Wenn Sie eine Menge Aktivitäten wie meine haben, können Sie dies in Ihrer Anwendung tun oder wenn Sie nicht den Code für jedes Aktivitäts-Tag im Manifest eingeben möchten.
in Ihrer Application Base-Klasse erhalten Sie einen Lifecycle-Callback
im Grunde genommen geschieht für jede Aktivität, die beim Erstellen des On-Create-In-Application-Class-Triggers ausgelöst wird, der 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) {
}
});
}
ich hoffe das hilft.
Set Hochformat oder Querformat erzwingen, Linien hinzufügen.
Import unter der Zeile:
import Android.content.pm.ActivityInfo;
Unterhalb der Zeile direkt über setContentView(R.layout.activity_main);
hinzufügen
Für Hochformat:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//Set Portrait
Für Landschaft:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//Set Landscape
Das wird auf jeden Fall funktionieren.
Laut Android-Dokumentation sollten Sie als mögliche Konfigurationsänderung auch häufig screenSize
angeben.
Android:configChanges="orientation|screenSize"
Wenn Ihre Anwendung auf API-Level 13 oder höher abzielt (wie durch die Attribute minSdkVersion und targetSdkVersion deklariert), sollten Sie auch die Konfiguration "screenSize" deklarieren, da sie sich auch ändert, wenn ein Gerät zwischen Hoch- und Querformat wechselt.
Wenn Sie alle den Wert keyboardHidden
in Ihre Beispiele aufnehmen, sollten Sie dann auch locale
, mcc
, fontScale
, keyboard
, _ [$ var] berücksichtigen. _ und andere?..
Ich hatte diese Zeile in meiner 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">
Was ich geändert habe (gerade hinzugefügt 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">
Das hat Dinge für mich behoben.
Eine Ergänzung: Ich habe kürzlich eine App aktualisiert, die vorherige funktionierte sowohl im Quer- als auch im Hochformat, und ich möchte, dass die aktualisierte Version im Hochformat funktioniert
Android:screenOrientation="portrait"
auf die entsprechende Aktivität, und es ist gerade abgestürzt, als ich das Update getestet habe. Dann habe ich hinzugefügt
Android:configChanges="orientation|keyboardHidden"
auch und es funktioniert.
Wenn Sie in debug
und release
Builds unterschiedliche Ausrichtungen unterstützen möchten, schreiben Sie dies (siehe https://developer.Android.com/studio/build/gradle-tips#share) -eigenschaften-mit-dem-manifest ).
Im build.gradle
Ihres app
Ordners schreiben:
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"]
}
}
}
Dann können Sie in AndroidManifest
diese Variable "Ausrichtung" in jedem Activity
verwenden:
<activity
Android:name=".LoginActivity"
Android:screenOrientation="${orientation}" />
Du kannst hinzufügen Android:configChanges
:
manifestPlaceholders = [configChanges: "", orientation: "fullSensor"]
in debug und manifestPlaceholders = [configChanges: "keyboardHidden|orientation|screenSize", orientation: "portrait"]
in Freigabe,
<activity
Android:name=".LoginActivity"
Android:configChanges="${configChanges}"
Android:screenOrientation="${orientation}" />
Ich denke, Sie möchten hinzufügen Android:configChanges="orientation|keyboardHidden"
zu Ihrer Tätigkeit? Andernfalls wird die Aktivität bei Konfigurationsänderung neu gestartet. Das onConfigurationChanged
würde dann nicht aufgerufen, nur das onCreate