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. elasticsearch的插件安装

    目前使用的是2.4.5版本的es 安装的时候注意以下几点 : 1.如果想所有的ip都能访问es,需要修改config下的elasticsearch.yml.修改如下 network.host=0.0. ...

  2. 说说 PADS Layout 中的第 20 层和 第 25层

    说说 PADS Layout 中的第 20 层和 第 25层 PADA Layout 有一个不成文的说明,第 20 层和第 25 层各有各的用途. 第 20 层是 Placement Outline ...

  3. 大数据框架hadoop的序列化机制

    Java内建序列化机制 在Windows系统上序列化的Java对象,可以在UNIX系统上被重建出来,不需要担心不同机器上的数据表示方法,也不需要担心字节排列次序. 在Java中,使一个类的实例可被序列 ...

  4. PHPstorm配置PHPunit对composer引入的php代码进行单元测试

    1. 如何安装PHPunit,这里不展述(如需打断点debug测试,安装PHP的xdebug扩展方法也不展开说了 https://xdebug.org/) 2.如何进行配置 以 PHP设计模式的代码为 ...

  5. CSS背景图像的简单响应

    本文设有很多,最理想的解决方案,响应图像只是其中之一.我们建议您查看不同的方法,然后再选择一个特定的响应图像解决方案,包括这两个:如何避免重复下载响应图像中选择响应图像解决方案. 大家都在谈论的的sr ...

  6. 1021 docker prometheus监控体系

    jmeter plugin监控的信息很少,只有cpu.内存.网络IO,但这些是不够的.例如对于分析mysql数据库的慢查询.最大连接数等更加细密度的信息. 服务端稳定测试的三个前提: 1.应用级别的自 ...

  7. UI“三重天”之selenium--常用API和问题处理(三)

    Selenium常用API: 前面两篇示例代码中用到了一些selenium的API方法,例如定位元素的八种方法.访问url.等待.操作浏览器.获取title.点击.清理等等. 有关于selenium的 ...

  8. [ML] Gradient Descend Algorithm [Octave code]

    function [theta, J_history] = gradientDescentMulti(X, y, theta, alpha, num_iters) m = length(y); % n ...

  9. 「小程序JAVA实战」小程序的分享和下载功能(69)

    转自:https://idig8.com/2018/09/25/xiaochengxujavashizhanxiaochengxudefenxianghexiazaigongneng68/ 在小程序上 ...

  10. FoxPro 数据库文件及记录命令

    ADDTABLE 在当前数据库中添加一个自由表 APPEND 在表的末尾添加一个或多个新记录 APPEND FROM ARRAY 由数组添加记录到表中 APPEND FROM 从一个文件中读入记录,追 ...