21. April 2013

Android: Automatische Drehung einer Activity verhindern

Um in einer Android-App den Orientierungswechsel einer Activity zu unterbinden, wenn das Gerät gedreht wird, gibt es die Möglichkeit, eine bestimmte Orientierung fest vorzuschreiben. Dies kann entweder über ein entsprechendes Attribute in der AndroidManifest.xml oder im Code der Activity geschehen.

Um die Orientierung in der AndroidManifest.xml fest vorzuschreiben, genügt es, die Definition der jeweiligen Activity folgendermaßen zu erweitern:
 <activity  
   android:name=".Activity"  
   android:label="@string/app_name"  
   android:screenOrientation="portrait" >  
   <intent-filter>  
     <action android:name="android.intent.action.MAIN" />  
     <category android:name="android.intent.category.LAUNCHER" />  
   </intent-filter>  
 </activity>  

Durch setzen des Attributs android:screenOrientation auf den Wert "portrait" wird die Orientierung der Activity auf den Portraitmodus, also das Hochkantformat, festgelegt. Soll stattdessen der Landscape-Modus verwendet werden, muss der Wert auf "landscape" gesetzt werden.

Um die Orientierung stattdessen im Code zu setzen muss in der jeweiligen Activity folgender Befehl aufgerufen werden:
 setRequestedOrientation(Configuration.ORIENTATION_PORTRAIT);  

Auch bei dieser Variante muss der Wert ORIENTATION_PORTRAIT auf ORIENTATION_LANDSCAPE geändert werden, falls der Landscape-Modus gesetzt werden soll. Um die Festlegung der Orientierung später wieder aufzuheben, kann der Wert auf ORIENTATION_UNDEFINED gesetzt werden.

Statt die Orientierung bereits im Vorraus fest zu setzen, ist es manchmal gewollt, die Activity der aktuellen Ausrichtung des Geräts nach zu starten, anschließend aber keinen Orientierungswechsel mehr zu erlauben. Ein solches Verhalten ist über folgenden Code realisierbar:
 @Override  
 public final void onCreate(final Bundle savedInstanceState) {  
   super.onCreate(savedInstanceState);  
   setContentView(R.layout.activity_layout);  
   if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {  
     setRequestedOrientation(Configuration.ORIENTATION_PORTRAIT);  
   } else {  
     setRequestedOrientation(Configuration.ORIENTATION_LANDSCAPE);  
   }  
 }  

Hierbei wird nach dem Starten der Activity die aktuelle Orientierung über den Befehl getResources().getConfiguration().orientation ausgelesen und abhängig von ihrem Wert anschließend über den bereits oben erwähnten Befehl festgelegt.

Keine Kommentare:

Kommentar veröffentlichen