2016-04-20 12 views
0

Ist es irgendwie möglich, die Ausrichtung der App abhängig von der Ausrichtung festzulegen, die beim Start der App verwendet wurde?Android Orientierung beibehalten von App Start

Beispiel

Damit meine ich, sagen wir mal Benutzer meine App im Querformat gestartet. O möchte, dass dieser Zustand gespeichert wird und der Benutzer die Ausrichtung nicht ändern kann, indem er das Telefon dreht (ich möchte es sperren, bis der Benutzer die Anwendung erneut ausführt und von dort aus prüft, ob der Benutzer sie im Querformat oder im Hochformat gestartet hat)

CODE (bisher)

Configuration newConfig = getResources().getConfiguration(); 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
      Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); 
      // set background for landscape through app 
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { 

    Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); 
      // set background for portrait through app 
    } 

Dies war etwas, was ich hier auf sO gefunden. Könnte ich es so machen? Setzen Sie dies in meine erste Aktivität und verwenden Sie dann den Orientierungsstatus von hier für den Rest der Aktivitäten.

Antwort

2

Sie können SharedPreferences verwenden, um eine zu speichern Wert, der gespeichert wird, selbst wenn die App geschlossen ist.
einfach eine Klasse SaveOrientation machen:

public class SaveOrientation { 

    static final String ORIENTATION = "orientation"; 

    static SharedPreferences getSharedPreferences(Context ctx) { 
     return PreferenceManager.getDefaultSharedPreferences(ctx); 
    } 

    // value will be between 0 and 1 
    public static void setOrientation(Context ctx, int value) { 
     SharedPreferences.Editor editor = getSharedPreferences(ctx).edit(); 
     editor.putInt(ORIENTATION, value); 
     editor.commit(); 
    } 

    public static String getOrientation(Context ctx) { 
     return getSharedPreferences(ctx).getString(ORIENTATION, ""); 
    } 

} 

Und dann in Ihrem MainActivity:

int portrait = 0; 
int landscape = 1; 
. 
. 
. 
// in your onCreate : 
Configuration newConfig = getResources().getConfiguration(); 
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     SaveOrientation.setOrientation(this,portrait); 
}else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { 
     SaveOrientation.setOrientation(this,landscape); 
} 
applyOrientation(); 
. 
. 
. 
// method applyOrientation 
private void applyOrientation(){ 
    int orientation = SaveOrientation.getOrientation(this); 

    if(orientation == portrait){ 
    this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

    }else if (orientation == landscape){ 
    this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
} 
1

Sie können es mithilfe der ActivityInfo-Klasse implementieren.

ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE 

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

ActivityInfo.SCREEN_ORIENTATION_PORTRAIT 

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

prüfen ActivityInfo here

Button buttonSetPortrait = (Button)findViewById(R.id.setPortrait); 
Button buttonSetLandscape = (Button)findViewById(R.id.setLandscape); 

buttonSetPortrait.setOnClickListener(new Button.OnClickListener(){ 

    @Override 
    public void onClick(View arg0) { 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    } 

}); 

buttonSetLandscape.setOnClickListener(new Button.OnClickListener(){ 

    @Override 
    public void onClick(View arg0) { 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
    } 

}); 

http://android-er.blogspot.in/2011/08/set-screen-orientation-programmatically.html

Falls jemand sinnvolle Orientierung Beschreibung erhalten möchte (wie das zu onConfigurationChanged weitergegeben (..) mit jener reverseLandscape, sensorLandscape und so weiter), verwenden Sie einfach getRequestedOrientation()

+0

Danke ActivityInfo nur knapp sein Ziel wussten, dass für die Erwähnung, aber ich ging mit Davids Ansatz. Und für die Erläuterung + Beispiel wirklich hilfreich – MePo