Android 切換橫豎屏
阿新 • • 發佈:2018-12-12
一個專案一般會自己先定義專案是橫屏還是豎屏但是也有可以橫屏和豎屏之間切換的activty。
切換橫豎屏的方法:
//判斷當前螢幕方向
if(getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
//切換豎屏
MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}else{
//切換橫屏
MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
但是這樣切換橫豎屏會讓activity重新載入。生命週期為:
onStop
onDestroy
onCreate
onStart
onResume
為了解決這樣的問題在配置檔案里加上
android:configChanges="orientation|keyboardHidden|screenSize"
就不會重新載入頁面,只會進入到切換裡面的生命週期中。
onConfigurationChanged
AndroidManifest.xml
<activity android:name=".MainActivity" android:configChanges="orientation|keyboardHidden|screenSize" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
MainActivity.java
package com.kkrs.change; import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity { private Button change; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); change = (Button)findViewById(R.id.change); Log.e("sys","onCreate"); } @Override protected void onStart() { super.onStart(); Log.e("sys","onStart"); change.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Log.d("sys","被點選了"); //判斷當前螢幕方向 if(getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) { //切換豎屏 MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); }else{ //切換橫屏 MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } } }); } //橫豎屏切換 @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); Log.e("sys","onConfigurationChanged"); } @Override protected void onStop() { super.onStop(); Log.e("sys","onStop"); } @Override protected void onResume() { super.onResume(); Log.e("sys","onResume"); } @Override protected void onDestroy() { super.onDestroy(); Log.e("sys","onDestroy"); } }