一個項目一般會自己先定義項目是橫屏還是豎屏但是也有可以橫屏和豎屏之間切換的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"); } }