Android的横竖屏切换

  一、在 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);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值