android手机横屏和竖屏与android:configChanges

原文地址:http://woshixy.blog.51cto.com/5637578/1081913

目前大多数手机都支持重力感应随之而来的就是屏幕方向改变的问题。对应普通开发者来说屏幕的随意改变也会带来困扰。在Google自带的doc里可以看到,如果设备的配置(Resources.Configuration中进行了定义)发生改变,那么所有用户界面上的东西都需要进行更新以适应新的配置。因为Activity是与用户交互的最主要的机制,它包含了处理配置改变的专门支持。除非你特殊指定,否则当配置发生改变(比如屏幕方向、语言、输入设备等等的改变)时你当前的activity都将被销毁,这销毁是通过一个正常的activity生命周期过程进行的。如果activity之前正在前景画面,当这个实例的onDestroy()调用完成后将会启动这个activity的一个新的实例,并将前面那个实例中所保存的内容传递给新的实例。因为任何的应用资源(包括layout文件)都有可能由于任何配置值改变。

因此处理配置改变的唯一安全的方法就是重新获取所有的资源,包括layout、绘图资源(原文drawables)、字符串资源。由于activity已经如何保存自己的状态并从这些状态中重建自身,所以activity 重新启动自身来获得新的配置将是一个非常便利的途径。

在一些特殊的情况中你可能希望当一种或者多种配置改变时避免重新启动你的activity。你可以通过在manifest中设置android:configChanges属性来实现这点。你可以在这里声明activity可以处理的任何配置改变,当这些配置改变时不会重新启动activity,而会调用activity的onConfigurationChanged(Resources.Configuration)方法。

如果改变的配置中包含了你所无法处理的配置(在android:configChanges并未声明),你的activity仍然要被重新启动,而onConfigurationChanged(Resources.Configuration)将不会被调用。

①在AndroidManifest.xml中设置Activity的android:configChanges属性

在屏幕方向改变的时候,如果没有处理,程序会自动重启。对应一些需要保存用户数据的应用中必须处理这种情况。

  1. <activity android:name=".AndroidLight"
  2. android:label="@string/app_name"
  3. android:configChanges="orientation|keyboardHidden">
  4. <intent-filter>
  5. <action android:name="android.intent.action.MAIN" />
  6. <category android:name="android.intent.category.LAUNCHER" />
  7. </intent-filter>
  8. </activity>

指定屏幕方向改变和键盘隐藏时通知程序。不会重新启动activity,而会调用activity的onConfigurationChanged(Resources.Configuration)方法。在程序中可以添加处理事件

  1. @Override
  2. public void onConfigurationChanged(Configuration newConfig) {
  3. super.onConfigurationChanged(newConfig);
  4. Log.d(TAG," == onConfigurationChanged");
  5. processLayout();//自定义函数处理配置改变事件
  6. }

②可在AndroidManifest.xml中设置Activity的android:screenOrientation属性

  1. <activity android:name=".AndroidLight"
  2. android:label="@string/app_name"
  3. android:screenOrientation="portrait">
  4. <intent-filter>
  5. <action android:name="android.intent.action.MAIN" />
  6. <category android:name="android.intent.category.LAUNCHER" />
  7. </intent-filter>
  8. </activity>

这样指定屏幕方向为竖屏。屏幕就不会自动旋转了。横屏的值时landscape。

android手机横屏和竖屏与android:configChanges,布布扣,bubuko.com

时间: 2025-01-31 01:39:20

android手机横屏和竖屏与android:configChanges的相关文章

android设置横屏和竖屏的方法

方法一:在AndroidManifest.xml中配置 假设不想让软件在横竖屏之间切换,最简单的办法就是在项目的AndroidManifest.xml中找到你所指定的activity中加上android:screenOrientation属性.他有下面几个參数: "unspecified":默认值 由系统来推断显示方向.判定的策略是和设备相关的,所以不同的设备会有不同的显示方向. "landscape":横屏显示(宽比高要长) "portrait"

android界面横屏和竖屏的切换

关于android横屏和竖屏的切换网上给了很多种.但是有些介绍的方法都是在android旧版本上. 我现在把握用到的情况写下来用于备忘: android 版本:4.0 - 4.4 要求:android 横竖屏转换时不需要重新调用oncreate方法 步骤: 1.在Androidmenifest相应的activity里面添加 android:configChanges="orientation|keyboardHidden|screenSize" 2.在代码中比如(RoomActivit

Android 设置横屏或竖屏

private void init() { Button landButton = (Button) findViewById(R.id.landbutton); landButton.setOnClickListener(new ClickListenerlandButton()); Button VButton = (Button) findViewById(R.id.Vbutton); VButton.setOnClickListener(new ClickListenerVButton(

基于jQuery的判断iPad、iPhone、Android是横屏还是竖屏

function orient() {if (window.orientation == 90 || window.orientation == -90) {//ipad.iphone竖屏:Andriod横屏$("body").attr("class", "landscape");orientation = 'landscape';return false;}else if (window.orientation == 0 || window.o

H5网页判断手机横屏或是竖屏

我们做出来的H5页面在手机端浏览的时候,用户很有可能会产生更换横竖屏的操作,这时如果我们能够判断出横竖屏,就可以更好的优化我们的网页,进而拥有更好的用户体验度.下面是判断横竖屏的代码: window.addEventListener('orientationchange', function(event){     if ( window.orientation == 180 || window.orientation==0 ) {         alert("竖屏");     }

判断手机横屏和竖屏方向

function orient() { if (window.orientation == 90 || window.orientation == -90) { //ipad.iphone竖屏:Andriod横屏 $("body").attr("class", "landscape"); orientation = 'landscape'; return false; }else if (window.orientation == 0 || wi

js判断手机浏览器是横屏or竖屏

移动端的浏览器一般都支持window.orientation这个参数,通过这个参数可以判断出手机是处在横屏还是竖屏状态. 从而根据实际需求而执行相应的程序.通过添加监听事件onorientationchange,进行执行就可以了. //判断手机横竖屏状态: function hengshuping(){ if(window.orientation==180||window.orientation==0){ alert("竖屏状态!") } if(window.orientation==

使用JavaScript判断手机处于横屏还是竖屏

移动端的浏览器一般都支持window.orientation这个参数,通过这个参数可以判断出手机是处在横屏还是竖屏状态.从而根据实际需求而执行相应的程序.通过添加监听事件onorientationchange,进行执行就可以了. //判断手机横竖屏状态: function hengshuping(){ if(window.orientation==180||window.orientation==0){ alert("竖屏状态!") } if(window.orientation==9

android 强制设置横屏 判断是横屏还是竖屏

判断activity 是横屏还是竖屏  方法 1: //根据设备配置信息 Configuration cf= this.getResources().getConfiguration(); //获取设置的配置信息 int ori = cf.orientation ; //获取屏幕方向 if(ori == cf.ORIENTATION_LANDSCAPE){   //横屏 }else if(ori == cf.ORIENTATION_PORTRAIT){  //竖屏 }   方法2: 通过设备分辨