第一。横竖屏切换连带载入多屏布局问题:

假设要让软件在横竖屏之间切换。因为横竖屏的高宽会发生转换,有可能会要求不同的布局。

能够通过下面两种方法来切换布局:

1)在res文件夹下建立layout-land和layout-port文件夹,对应的layout文件名称不变,比方:layout-land是横屏的layout,layout-port是竖屏的layout。其它的不用管,横竖屏切换时程序调用Activity的onCreate方法中的setOnContent(xxx),并自己主动载入对应的布局。

2)假如布局资源不依照如上设置。则能够通过java代码来推断当前是横屏还是竖屏然后来载入对应的xml布局文件。由于当屏幕变为横屏的时候,系统会又一次载入当前Activity的onCreate方法(也就是说:该Activity的生命周期要重头開始),你能够把下面方法放在你的onCreate中来检查当前的方向,然后能够让你的setContentView来载入不同的layout 。

/** 1:竖屏   2:横屏 推断屏幕以旋转的方向 */
private int orientation;
orientation=getResources().getConfiguration().orientation;
/**
假设使用该屏幕切换方式,则该Activity的生命周期在你切换屏幕的时刻会一直遵循:onPause()---->onStop--->onDestroy()---->onCreate()---->onStart()----->onResume(); 不会运行以下的方法:onConfigurationChanged(Configuration newConfig)
*/
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
Toast.makeText(getApplicationContext(), "屏幕切换了", Toast.LENGTH_SHORT).show();
}

第二,强制设定屏幕的横、竖屏方向:

Android横竖屏切换在手机开发中比較常见,非常多软件在开发过程中为了避免横竖屏切换时引发不必要的麻烦。通常要强制设置横竖屏的方向,

通过在AndroidManifest.xml中设置activity中的android:screenOrientation属性值来实现。

比方下列设置:

横屏显示设置:android:screenOrientation="lanscape"

竖屏显示设置:android:screenOrientation="portrait"

当然上述改动也能够在Java代码中通过代码来实现:(android屏幕的切换会重新启动Activity,所以在Activity销毁前保存当前活动的状态,并在Activity再次Create的时候加载配置)

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)



第三,拦截横竖屏切换 须要的配置文件:onConfigurationChanged

Activity每次横竖屏切换都会又一次调用onPause->onStop-> onDestory->onCreate->onStart->onResume(为此内容和数据要保存和读取,否则转屏之前的内容就会消失了)

非常多时候这种结果让程序繁琐。为此Android提供了在manifest中设置android:configChanges属性。从而让Activity不延续上述的重建流程。

方式一)在Androidproject的Mainfest.xml中配置Activity:android:configChanges="keyboardHidden|orientation
。横竖屏切换之后就不会去运行OnCreat函数了,而是会去调用onConfigurationChanged()这样就能控制横竖屏的切换了。

<Android横竖屏切换不又一次调用onCreate()>可是,有一点请注意:Android2.3之前使用上面的android:configChanges="keyboardHidden|orientation就能行。可是,在4.0之后。

必须就要使用这个属性android:configChanges="orientation|keyboardHidden|screenSize才干避免Activity又一次载入该类不延续上述的重建流程。



方式二)用户能够在Activity或View的:onConfigurationChanged(Configurationnew   Config) ,函数中获取当前横竖屏參数。

至于其调用顺序跟touch时间的传递顺序相似,只是他没有消费事件的概念。会顺次调用到每个onConfigurationChanged函数。

须要重写Activity的onConfigurationChanged方法。实现方式例如以下,不须要做太多的内容

须要注意的是。onConfigurationChanged函数中仅仅能获得横竖屏切换后的參数。在该函数中获取不到新的Layout和控件的尺寸位置信息,假设要处理尺寸和位置信息,必须通过消息异步或者延时调用;

        @Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
// land do nothing is ok
} else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
// port do nothing is ok
}
}

第四,自适应切换屏幕:

假设想让它启动的时候是横屏的话就横屏表示,纵屏的话就纵屏表示。然后手机切换横竖屏就不能用了该怎么解决呢?

首先:在Mainfest.xml中追加

android:screenOrientation="sensor" android:configChanges="orientation|keyboardHidden"

然后:取得屏幕的长和宽,进行比較设置横竖屏的变量。

Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();
if (width > height) {
orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; // 横屏
} else {
orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; // 竖屏
}

然后:在onConfigurationChanged()函数中追加this.setRequestedOrientation(orientation)

public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
this.setRequestedOrientation(orientation);
}

可是这种话你切到别的画面的时候再回到原画面。它就仍然是横的或者是纵的。

怎么让它从别的屏幕回来后。又又一次横竖屏布局呢?

仅仅要在OnResume()中在设定下即可了。可是这个仅仅仅仅是支持横竖屏仅仅有一个layout的;

protected void onResume() {
orientation = ActivityInfo.SCREEN_ORIENTATION_USER;
this.setRequestedOrientation(orientation);
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();
if (width > height) {
orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
} else {
orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
}
super.onResume();
}

有三点请注意:

1、不设置Activity的android:configChanges时。切屏会又一次调用各个生命周期,切横屏时会运行一次。切竖屏时会运行两次

2、设置Activity的android:configChanges="orientation"时。切屏还是会又一次调用各个生命周期,切横、竖屏时仅仅会运行一次

3、设置Activity的android:configChanges="orientation|keyboardHidden"时。切屏不会又一次调用各个生命周期。仅仅会运行onConfigurationChanged方法

建一个群。方便大家交流:蹦蹦哒Android <群号:423923313>

Android横竖屏切换及其相应布局载入问题的更多相关文章

  1. Android横竖屏切换及其对应布局加载问题

    第一,横竖屏切换连带横竖屏布局问题: 如果要让软件在横竖屏之间切换,由于横竖屏的高宽会发生转换,有可能会要求不同的布局. 可以通过以下两种方法来切换布局: 1)在res目录下建立layout-land ...

  2. Android横竖屏切换小结

    Android横竖屏切换小结 (老样子,图片啥的详细文档,可以下载后观看 http://files.cnblogs.com/franksunny/635350788930000000.pdf) And ...

  3. 【转】Android横竖屏切换问题

    Android横竖屏切换总结(Android资料) Android横竖屏要解决的问题应该就两个: 一.布局问题 二.重新载入问题 1.布局问题:如果不想让软件在横竖屏之间切换,最简单的办法就是在项目的 ...

  4. Android横竖屏切换总结

    Android横竖屏切换总结(Android资料) Android横竖屏要解决的问题应该就两个: 一.布局问题 二.重新载入问题 1.布局问题:如果不想让软件在横竖屏之间切换,最简单的办法就是在项目的 ...

  5. 我的Android进阶之旅------>Android横竖屏切换总结

    在默认情况下当屏幕从竖评变到横屏时会触发 onConfigurationChanged 事件 在默认情况下会重新加载画面并显示和横屏一样的画面,这样会有2个问题,   * 布局问题,在竖屏 显示的布局 ...

  6. Android横竖屏切换解决方案

    Android横竖屏切换解决方案 首先在Mainifest.xml的Activity元素中加入android:configChanges="orientation|keyboardHidde ...

  7. Android横竖屏切换重载问题与小结

    (转自:http://www.cnblogs.com/franksunny/p/3714442.html) (老样子,图片啥的详细文档,可以下载后观看 http://files.cnblogs.com ...

  8. Android 横竖屏切换小结

    (自己体会:每次横竖屏自动切时都会run Activity的onCreate,即相当后重新进入Activity初始化一样:) 转自:http://www.cnblogs.com/franksunny/ ...

  9. Android横竖屏切换处理

    Android横竖屏要解决的问题应该就两个: 1.布局问题:2.重新载入问题   一.布局问题: 如果不想让软件在横竖屏之间切换,最简单的办法就是在项目的AndroidManifest.xml中找到你 ...

随机推荐

  1. 很棒的Sketch动画教程

    就像别人可以用PPT做动画,而你只会用它做演示,别人可以拿ps做gif,你却只会用它p照片.软件就是这样,我们使用大多数的软件也就是了解的程度,很难算得上精通.(后面补充了小教程,想看干货的直接看后面 ...

  2. c++ struct 使用

     typedef与结构结合使用 typedef struct tagMyStruct{  int iNum; long lLength;} MyStruct; 这语句实际上完成两个操作: 1) 定义一 ...

  3. poj 1581 A Contesting Decision

    题目大意:有四个题目,有某些队做题,写一个判断程序如:Stars 2 20 5 0 4 190 3 220Stars是队名,2是提交的次数,20是花费的时间,花费时间为0则说明题目提交错误,错误的忽略 ...

  4. linux 从命令行自动识别文件并将其打开的命令

    若是shell是 zsh,则可: 使用 alias -s 定义后缀别名 (zsh) % alias -s pl=perl % script.pl perl script.pl % alias -s p ...

  5. 异步编程之Generator(1)——领略魅力

    异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2):探究原理 异步编程之Promise(3):拓展进阶 异步编程之Generator(1)--领略魅 ...

  6. 从今天开始每天刷一题,并写在这里 分类: ACM 2015-06-16 23:52 14人阅读 评论(0) 收藏

    开始什么题都可以,后面会加大难度. 每天! 如果有一天有特殊情况,也要来这里打卡,并说明原因,并在其他某一天补上! 版权声明:本文为博主原创文章,未经博主允许不得转载.

  7. git会议分享

    git add . git add -A git add common.scss   只迁入某个文件 git pull h5 远程的:分支    这样就成功拉取一个新分支了 git push h5(远 ...

  8. linq to sql转载

    LINQ简介 LINQ:语言集成查询(Language INtegrated Query)是一组用于c#和Visual Basic语言的扩展.它允许编写C#或者Visual Basic代码以查询数据库 ...

  9. iPhone 微信平台链接到微信文章 返回上一页问题

    东钿金融服务平台 有个隐藏按钮,点击此按钮,会弹出一个九宫格的功能栏,其中有个‘工作时间‘,这项,它是链接到微信公众号里面的一篇文章,按照平常写法就是 直接把文章链接地址 赋在a的href上,但是iP ...

  10. QT输入输出(一) 之 QDataStream 测试

    QT提供了两个高级别的流类---QDataStream和QTextStream,可以从任意的输入输出设备读取或写入数据. QDataStream用于读写二进制数据,它的优点是:在读写数据的时候已经严格 ...