Ich möchte nur ein paar Flags setzen, wenn sich meine Orientierung im Querformat befindet, so dass ich, wenn die Aktivität in onCreate () neu erstellt wird, zwischen dem, was im Hoch- oder Querformat geladen werden soll, wechseln kann. Ich habe bereits ein Layout-Land-XML, das mein Layout verwaltet.
public void onConfigurationChanged(Configuration _newConfig) {
if (_newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
this.loadURLData = false;
}
if (_newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
this.loadURLData = true;
}
super.onConfigurationChanged(_newConfig);
}
Das Überschreiben von onConfigurationChanged verhindert, dass mein Layout-Land-XML in Querformat geladen wird.
Ich möchte nur die aktuelle Ausrichtung meines Geräts in onCreate () abrufen. Wie kann ich das bekommen?
Activity.getResources().getConfiguration().orientation
int orientation = this.getResources().getConfiguration().orientation;
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
// code for portrait mode
} else {
// code for landscape mode
}
Wenn die Oberklasse von this
Context
ist
Bei einigen Geräten kann void onConfigurationChanged()
abstürzen. Der Benutzer verwendet diesen Code, um die aktuelle Bildschirmausrichtung abzurufen.
public int getScreenOrientation()
{
Display getOrient = getActivity().getWindowManager().getDefaultDisplay();
int orientation = Configuration.ORIENTATION_UNDEFINED;
if(getOrient.getWidth()==getOrient.getHeight()){
orientation = Configuration.ORIENTATION_SQUARE;
} else{
if(getOrient.getWidth() < getOrient.getHeight()){
orientation = Configuration.ORIENTATION_PORTRAIT;
}else {
orientation = Configuration.ORIENTATION_LANDSCAPE;
}
}
return orientation;
}
Und verwenden
if (orientation==1) // 1 for Configuration.ORIENTATION_PORTRAIT
{ // 2 for Configuration.ORIENTATION_LANDSCAPE
//your code // 0 for Configuration.ORIENTATION_SQUARE
}
int rotation = getWindowManager().getDefaultDisplay().getRotation();
Dies gibt alle Orientierung wie normal und umgekehrt
und damit umgehen
int angle = 0;
switch (rotation) {
case Surface.ROTATION_90:
angle = -90;
break;
case Surface.ROTATION_180:
angle = 180;
break;
case Surface.ROTATION_270:
angle = 90;
break;
default:
angle = 0;
break;
}
getActivity().getResources().getConfiguration().orientation
dieser Befehl gibt den Int-Wert 1 für Hochformat und 2 für Querformat zurück
Falls jemand eine aussagekräftige Orientierungsbeschreibung erhalten möchte (wie diese an onConfigurationChanged(..)
mit diesen reverseLandscape
, sensorLandscape
und so weiter), verwenden Sie einfach getRequestedOrientation()
Verwenden Sie in Ihrer Aktivitätsklasse die folgende Methode:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
setlogo();// Your Method
Log.d("Daiya", "ORIENTATION_LANDSCAPE");
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
setlogoForLandScape();// Your Method
Log.d("Daiya", "ORIENTATION_PORTRAIT");
}
}
Wenn Sie dann erklären möchten, dass Ihre Aktivität eine Konfigurationsänderung vornimmt, bearbeiten Sie das entsprechende Element in Ihrer Manifestdatei, um das Android:configChanges
-Attribut mit einem Wert aufzunehmen, der die Konfiguration darstellt, die Sie behandeln möchten. Mögliche Werte sind in der Dokumentation für das Android:configChanges
-Attribut aufgeführt (die am häufigsten verwendeten Werte sind "Orientierung", um einen Neustart zu verhindern, wenn sich die Bildschirmausrichtung ändert, und "keyboardHidden", um einen Neustart zu verhindern, wenn sich die Tastaturverfügbarkeit ändert). Sie können mehrere Konfigurationswerte im Attribut deklarieren, indem Sie sie mit einer Pipe trennen Charakter.
<activity Android:name=".MyActivity"
Android:configChanges="orientation|keyboardHidden"
Android:label="@string/app_name">
Das ist alles!!
wenn Sie die onConfigurationChanged-Methode überschreiben möchten und trotzdem die grundlegenden Vorgänge ausführen möchten, sollten Sie super.onConfigyrationChanged () als erste Anweisung in der overriden-Methode verwenden.
Ich möchte nur eine Alternative vorschlagen, die einige von Ihnen betreffen wird:
Android:configChanges="orientation|keyboardHidden"
impliziert, dass wir ausdrücklich angeben, dass das Layout eingefügt werden soll.
Für den Fall, dass wir die automatische Injektion dank der Layout-Land- und Layout-Ordner beibehalten möchten. Sie müssen es nur noch zu onCreate hinzufügen:
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
getSupportActionBar().hide();
} else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
getSupportActionBar().show();
}
Hier wird je nach Ausrichtung des Telefons die Aktionsleiste angezeigt oder nicht