一、在 Android 的应用中默认是可以横竖屏切换的,每次屏幕的横竖屏切换会默认重启当前的 Activity
将屏幕固定有两种方法:
1、在 AndroidManifest.xml 文件中对应的 Activity 添加如下属性:
①、将屏幕固定为竖屏显示:
<activity android:screenOrientation="portrait">
②、将屏幕固定为横屏显示:
<activity android:screenOrientation="landscape">
2、在代码中设置:
①、设置竖屏(正方向):
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
②、设置竖屏(反方向):
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
③、设置横屏(正方向):
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
④、设置横屏(反方向):
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
二、横竖屏切换事件的处理:
1、重写 onConfigurationChanged() 方法:
首先在 AndroidManifest.xml 中对应的 Activity 添加 android:configChanges="orientation|screenSize"
属性,然后在对应的 Activity 中重写 onConfigurationChanged() 方法,这样当横竖屏切换的时候,就会响应
Activity 中的 onConfigurationChanged() 方法,然后对屏幕横竖屏做判断处理即可。
注:自从Android 3.2(API 13)后,在添加 Activity 的 android:configChanges="orientation|keyboardHidden"
后,还是一样会重新调用各个生命周期,因为 screen size 也开始跟着设备的横竖切换而改变。所以,在 AndroidManifest.xml
里设置的 minSdkVersion 和 targetSdkVersion 属性 >=13 的情况下,如果想阻止程序在运行时重新加载 Activity,除了
设置“orientation”,还必须设置“screenSize”。
1)、解决方法:AndroidManifest.xml 中设置 android:configChanges="orientation|screenSize"
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
if(this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
Log.i(tag, "当前是横屏模式");
}else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
Log.i(tag, "当前是竖屏模式");
}
super.onConfigurationChanged(newConfig);
}
2、重写 onSaveInstanceState() 与 onRestoreInstanceState() 方法:
1)、onSaveInstanceState() 函数在 FragmentActivity 中;onRestoreInstanceState() 函数
在 Activity 中。
2)、在屏幕切换横竖屏的时候,会响应 onSaveInstanceState() 函数,然后重启载入当前 Activity,最后响应
onRestoreInstanceState() 函数。
@Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
Log.i(tag, "onSave。。。");
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
// TODO Auto-generated method stub
Log.i(tag, "onRestore。。。");
super.onRestoreInstanceState(savedInstanceState);
}
将屏幕固定有两种方法:
1、在 AndroidManifest.xml 文件中对应的 Activity 添加如下属性:
①、将屏幕固定为竖屏显示:
<activity android:screenOrientation="portrait">
②、将屏幕固定为横屏显示:
<activity android:screenOrientation="landscape">
2、在代码中设置:
①、设置竖屏(正方向):
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
②、设置竖屏(反方向):
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
③、设置横屏(正方向):
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
④、设置横屏(反方向):
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
二、横竖屏切换事件的处理:
1、重写 onConfigurationChanged() 方法:
首先在 AndroidManifest.xml 中对应的 Activity 添加 android:configChanges="orientation|screenSize"
属性,然后在对应的 Activity 中重写 onConfigurationChanged() 方法,这样当横竖屏切换的时候,就会响应
Activity 中的 onConfigurationChanged() 方法,然后对屏幕横竖屏做判断处理即可。
注:自从Android 3.2(API 13)后,在添加 Activity 的 android:configChanges="orientation|keyboardHidden"
后,还是一样会重新调用各个生命周期,因为 screen size 也开始跟着设备的横竖切换而改变。所以,在 AndroidManifest.xml
里设置的 minSdkVersion 和 targetSdkVersion 属性 >=13 的情况下,如果想阻止程序在运行时重新加载 Activity,除了
设置“orientation”,还必须设置“screenSize”。
1)、解决方法:AndroidManifest.xml 中设置 android:configChanges="orientation|screenSize"
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
if(this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
Log.i(tag, "当前是横屏模式");
}else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
Log.i(tag, "当前是竖屏模式");
}
super.onConfigurationChanged(newConfig);
}
2、重写 onSaveInstanceState() 与 onRestoreInstanceState() 方法:
1)、onSaveInstanceState() 函数在 FragmentActivity 中;onRestoreInstanceState() 函数
在 Activity 中。
2)、在屏幕切换横竖屏的时候,会响应 onSaveInstanceState() 函数,然后重启载入当前 Activity,最后响应
onRestoreInstanceState() 函数。
@Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
Log.i(tag, "onSave。。。");
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
// TODO Auto-generated method stub
Log.i(tag, "onRestore。。。");
super.onRestoreInstanceState(savedInstanceState);
}