Android 禁止屏幕旋转 & 旋转屏幕时保持Activity内容

 
1.在应用中固定屏幕方向。
 
     在AndroidManifest.xml的activity中加入:
           android:screenOrientation=”landscape”
     属性即可(landscape是横向,portrait是纵向)。
 
OK
 
 

2.随屏幕旋转时,不重新调用onCreate。

 

当将手机屏幕旋转时,系统会被强制重置启动onCreate方法。

 
1)修改AndroidManifest.xml
 
     在activity属性中加入:
          android:configChanges=”orientation|keyboardHidden”
  • android:configChanges,这个方法主要是负责列出清单,当清单上用户指定的设置改变时,Activity会自己处理这些变化。
  • orientation,屏幕界面旋转(可能是用户手动旋转的),【注意:如果你的开发API等级等于或高于13,你还需要设置screenSize,因为screenSize会在屏幕旋转时改变】
  • keyboardHidden,键盘辅助功能改变
2)在相对应的Activity中继承重写onConfigurationChanged方法,这个方法将会在我们的应用发生变化时,让我们能随心所谓地进行监听处理。
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
if (newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE) {
// Nothing need to be done here } else {
// Nothing need to be done here
} }
还有界面设计方面的问题,Android手机大部分是HVGA、WVGA的分辨率,屏幕视觉上比较“狭长”。往往竖着看很合适的布局,当屏幕横向翻转以后 显示会变得很别扭。当屏幕由竖直方向改变为横向时,我们可以把界面中的控件由本来的垂直线性布局修改为横向线性布局,这样布局会更合理一些。我们可以自己 写一个布局类集成LinearLayout布局,通过覆盖onMeasure方法来实现这种自动布局。当屏幕的宽高发生改变时,系统会调用 onMeasure方法。通过这个方法,我们可以获得改变以后的宽高尺寸,从而来实现屏幕翻转的自动布局,主要代码如下:

Java代码 
 /**  
  * 屏幕改变时自动调用  
* @param widthMeasureSpec 改变后的宽度  
* @param heightMeasureSpec 改变后的高度  
*/  
 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)   
 {   
     /*宽度*/  
     int screenWith = View.MeasureSpec.getSize(widthMeasureSpec);   
     /*高度*/  
     int screenHeight = View.MeasureSpec.getSize(heightMeasureSpec);   
        
     /*竖直布局*/  
     if (screenWith < screenHeight)   
     {   
            
         this.setOrientation(VERTICAL);   
         for (int i = 0; i < getChildCount(); i++)   
         {   
             View childView = getChildAt(i);   
             if (childView instanceof CakyCanvas)   
             {   
                 /*该控件占布局的2/5*/  
                 LayoutParams params = new LayoutParams(screenWith,   
                         screenHeight * 2/ 5  
                 updateViewLayout(childView, params);   
             }   
             else if (childView instanceof CakyExplainCanvas)   
             {   
                 /*该控件占布局的3/5*/  
                 LayoutParams params = new LayoutParams(screenWith,   
                         screenHeight * 3/ 5  
                 updateViewLayout(childView, params);   
             }   
         }   
     }   
     /*横向布局*/  
     else  
     {   
            
         this.setOrientation(HORIZONTAL);   
         for (int i = 0; i < getChildCount(); i++)   
         {   
             View childView = getChildAt(i);   
             if (childView instanceof CakyCanvas)   
             {   
                 LayoutParams params = new LayoutParams(   
                         screenWith * 2/ 5  
                         screenHeight);   
                 updateViewLayout(childView, params);   
             }   
             else if (childView instanceof CakyExplainCanvas)   
             {   
                 LayoutParams params = new LayoutParams(   
                         screenWith * 3/ 5  
                         screenHeight);   
                 updateViewLayout(childView, params);   
             }   
         }   
     }   
     super.onMeasure(widthMeasureSpec, heightMeasureSpec);   
 }

Android 禁止屏幕旋转 & 旋转屏幕时保持Activity内容的更多相关文章

  1. Android禁止程序自动旋转的配置

    在想要禁止的Activity中加入 android:screenOrientation="portrait" 属性,其中,portrait是竖屏,landscape是横屏

  2. Android 禁止屏幕旋转、避免转屏时重启Activity

    一.禁止屏幕旋转 在AndroidManifest.xml的每一个需要禁止转向的Activity配置中加入android:screenOrientation属性: 可选项: landscape = 横 ...

  3. Android 解决setRequestedOrientation之后手机屏幕的旋转不触发onConfigurationChanged方法

    最近在做播放器的时候遇到一个问题,在屏幕方向改变之后需要切换播放器全屏/非全屏的时候,在重写了onConfigurationChanged方法并在manifest.xml配置文件中添加 android ...

  4. Android动态禁用或开启屏幕旋转工具

    package com.gwtsz.gts2.util; import android.content.Context; import android.provider.Settings; impor ...

  5. 【转】Unity3D研究院之设置自动旋转屏幕默认旋转方向

    http://www.xuanyusong.com/archives/2871 如下图所示,在处理屏幕默认旋转方向的时候可以在这里进行选择,上下左右一共是4个方向. 策划的需求是游戏采用横屏,但是要求 ...

  6. uwp - 禁用屏幕翻转/禁用屏幕旋转/禁用横屏模式

    原文:uwp - 禁用屏幕翻转/禁用屏幕旋转/禁用横屏模式 解决方案目录 > Package.appxmanifest 双击打开,把支持的旋转:纵向勾上,只勾这一个其他不勾,就可以了.同理,想让 ...

  7. Unity3D研究院之设置自动旋转屏幕默认旋转方向

    如下图所示,在处理屏幕默认旋转方向的时候可以在这里进行选择,上下左右一共是4个方向. 策划的需求是游戏采用横屏,但是要求支持两个方向自动旋转,如下图所示,我的设置是这样的. Default Orien ...

  8. 【iOS】屏幕旋转,屏幕自适应方向变化

    1. iOS有四个方向的旋转,为了保证自己的代码能够支持旋转,我们必须首先处理一个函数: - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInter ...

  9. Android中使用ViewFlipper实现屏幕页面切换(关于坐标轴的问题已补充更改)

    屏幕切换指的是在同一个Activity内屏幕间的切换,ViewFlipper继承了Framelayout类,ViewAnimator类的作用是为FrameLayout里面的View切换提供动画效果.如 ...

随机推荐

  1. Python源码分析之dis

    一.简单例子 def add(a, b): return a + b add_nums.py import foo a = [1, 'python'] a = 'a string' def func( ...

  2. HBase的几个实示例(二)

    1 开发环境 在进行Hbase开发前,需要安装JDK.Hadoop和Hbase,选择一款合适的开发IDE,具体安装方法就不介绍了,我的开发环境: 操作系统:Ubuntu Java版本:jdk1.8 H ...

  3. FastAdmin 学习线路 (2018-06-09 更新)

    FastAdmin 学习线路 以下为常规线路,非常规可跳过. FastAdmin 学习线路 基础 HTML CSS DIV Javascript 基础 jQuery php 基础 对象 命名空间 进阶 ...

  4. 详解Centos7 修改mysql指定用户的密码

    本文介绍了Centos7 修改mysql指定用户的密码,具体如下: 1.登陆mysql或者mariadb(两种任选其一) [root@localhost ~]# mysql -u root [root ...

  5. IP分片(IP Fragment)

    为什么要分片 不同的链路类型能够支持的最大传输单元值(MTU: Maxitum Transmission Unit)主要是由相关RFC文档规定的,常见的以太网链路的MTU值为1500,如果需要转发的I ...

  6. H5页面获取openid,完成支付公众号(未关注公众号)支付

    一.页面授权 // 进入页面获取权限code function initAuthorizeCode() { var appid = $("#appid").val();//公众号a ...

  7. 保持一个会话 添加 HTTP Cookie管理器

    在线程组中添加 http cookie manager即可 场景:登录后点击刷新简历

  8. [Nlog]使用经验

    <?xml version="1.0" ?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog ...

  9. Java之dom4j的简单解析和生成xml的应用

    一.dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的.dom4j是一个十分优秀的JavaXML API,具有性能优异.功能强大和极其易使用的特点,它的性能超过sun公 ...

  10. web开发的功能备忘录

    总体设计 Web项目开发中,我们可以根据不同的功能,将整个系统的功能进行划分.系统功能总体来说可以划分为两个模块:系统的必备功能和逻辑业务功能. 下面主要是分析一下系统的必备功能,所谓系统的必备功能是 ...