android 横竖屏和布局问题

在这里我做了一个小test,之前看过关于这方面的东西,到后来我才真正的遇到项目的时候,不得已才要去真正的熟悉里面的流程。

这里我贴测试源码:

TestActivity.java

package cn.com.hrmdemo;

import android.app.Activity;

import android.content.res.Configuration;

import android.os.Bundle;

import android.widget.Toast;

public class TestActivity extends Activity {

@Override

protected void onCreate(Bundle arg0) {

System.out.println("------ TestActivity onCreate------");

Toast.makeText(this, "onCreate。。。", Toast.LENGTH_SHORT).show();

super.onCreate(arg0);

setContentView(R.layout.test_linearlayout);

}

@Override

protected void onRestoreInstanceState(Bundle savedInstanceState) {

System.out.println("------ TestActivity onRestoreInstanceState------");

Toast.makeText(this, "onRestoreInstanceState。。。", Toast.LENGTH_SHORT).show();

// TODO Auto-generated method stub

super.onRestoreInstanceState(savedInstanceState);

}

@Override

protected void onStart() {

System.out.println("------ TestActivity onStart------");

Toast.makeText(this, "onStart。。。", Toast.LENGTH_SHORT).show();

// TODO Auto-generated method stub

super.onStart();

}

@Override

protected void onRestart() {

System.out.println("------ TestActivity onRestart------");

Toast.makeText(this, "onRestart。。。", Toast.LENGTH_SHORT).show();

// TODO Auto-generated method stub

super.onRestart();

}

@Override

protected void onResume() {

System.out.println("------ TestActivity onResume------");

Toast.makeText(this, "onResume。。。", Toast.LENGTH_SHORT).show();

// TODO Auto-generated method stub

super.onResume();

}

@Override

protected void onSaveInstanceState(Bundle outState) {

System.out.println("------ TestActivity onSaveInstanceState------");

Toast.makeText(this, "onSaveInstanceState。。。", Toast.LENGTH_SHORT).show();

// TODO Auto-generated method stub

super.onSaveInstanceState(outState);

}

@Override

protected void onPause() {

System.out.println("------ TestActivity onPause------");

Toast.makeText(this, "onPause。。。", Toast.LENGTH_SHORT).show();

// TODO Auto-generated method stub

super.onPause();

}

@Override

protected void onStop() {

System.out.println("------ TestActivity onStop------");

Toast.makeText(this, "onStop。。。", Toast.LENGTH_SHORT).show();

// TODO Auto-generated method stub

super.onStop();

}

@Override

protected void onDestroy() {

System.out.println("------ TestActivity onDestroy------");

Toast.makeText(this, "onDestroy。。。", Toast.LENGTH_SHORT).show();

// TODO Auto-generated method stub

super.onDestroy();

}

@Override

public void onConfigurationChanged(Configuration newConfig) {

System.out.println("------ TestActivity onConfigurationChanged------");

Toast.makeText(this, "屏幕转变了。。。", Toast.LENGTH_SHORT).show();

// TODO Auto-generated method stub

super.onConfigurationChanged(newConfig);

}

}

------------------------------------------------------上面是源码----------------------------------------------------------

下面看看demo的配置和运行的效果是怎样

这个横竖屏的配置主要是在AndroidManiFest.xml,就是Android App 的清单文件:

<activity .....

android:configChanges="想要配置的方式"

>

在你的activity 里面配置你的横竖屏切换方式

1). 什么都不做配置的情况下

a.正常情况下:

07-24 08:43:59.519: I/System.out(18726): ------ TestActivity onCreate------

07-24 08:43:59.609: I/System.out(18726): ------ TestActivity onStart------

07-24 08:43:59.619: I/System.out(18726): ------ TestActivity onResume------

b.切换横屏情况下:

07-24 08:51:01.359: I/System.out(18936): ------ TestActivity onPause------

07-24 08:51:01.379: I/System.out(18936): ------ TestActivity onSaveInstanceState------

07-24 08:51:01.389: I/System.out(18936): ------ TestActivity onStop------

07-24 08:51:01.399: I/System.out(18936): ------ TestActivity onDestroy------

07-24 08:51:01.429: D/memalloc(18936): /dev/pmem: Unmapping buffer base:0x5bb4d000 size:4608000 offset:3072000

07-24 08:51:01.429: D/memalloc(18936): /dev/pmem: Unmapping buffer base:0x5c8c5000 size:16531456 offset:14995456

07-24 08:51:01.449: I/System.out(18936): ------ TestActivity onCreate------

07-24 08:51:01.579: I/System.out(18936): ------ TestActivity onStart------

07-24 08:51:01.579: I/System.out(18936): ------ TestActivity onRestoreInstanceState------

07-24 08:51:01.599: I/System.out(18936): ------ TestActivity onResume------

c.再切换回竖屏的情况下:

07-24 08:51:42.669: I/System.out(18936): ------ TestActivity onPause------

07-24 08:51:42.689: I/System.out(18936): ------ TestActivity onSaveInstanceState------

07-24 08:51:42.699: I/System.out(18936): ------ TestActivity onStop------

07-24 08:51:42.729: I/System.out(18936): ------ TestActivity onDestroy------

07-24 08:51:42.759: D/memalloc(18936): /dev/pmem: Unmapping buffer base:0x5c8c5000 size:4608000 offset:3072000

07-24 08:51:42.759: D/memalloc(18936): /dev/pmem: Unmapping buffer base:0x5cd2a000 size:10797056 offset:9261056

07-24 08:51:42.789: I/System.out(18936): ------ TestActivity onCreate------

07-24 08:51:42.859: I/System.out(18936): ------ TestActivity onStart------

07-24 08:51:42.859: I/System.out(18936): ------ TestActivity onRestoreInstanceState------

07-24 08:51:42.879: I/System.out(18936): ------ TestActivity onResume------

2)配置android:configChanges="orientation|keyboardHidden"  (4.0以前)

a.正常情况下:

07-24 08:54:05.059: I/System.out(18936): ------ TestActivity onCreate------

07-24 08:54:05.199: I/System.out(18936): ------ TestActivity onStart------

07-24 08:54:05.219: I/System.out(18936): ------ TestActivity onResume------

b.切换横屏情况下:

07-24 08:54:25.909: I/System.out(18936): ------ TestActivity onPause------

07-24 08:54:25.919: I/System.out(18936): ------ TestActivity onSaveInstanceState------

07-24 08:54:25.929: I/System.out(18936): ------ TestActivity onStop------

07-24 08:54:25.949: I/System.out(18936): ------ TestActivity onDestroy------

07-24 08:54:25.979: D/memalloc(18936): /dev/pmem: Unmapping buffer base:0x5c7c5000 size:19603456 offset:18067456

07-24 08:54:25.979: D/memalloc(18936): /dev/pmem: Unmapping buffer base:0x5da77000 size:4608000 offset:3072000

07-24 08:54:26.019: I/System.out(18936): ------ TestActivity onCreate------

07-24 08:54:26.069: I/System.out(18936): ------ TestActivity onStart------

07-24 08:54:26.079: I/System.out(18936): ------ TestActivity onRestoreInstanceState------

07-24 08:54:26.079: I/System.out(18936): ------ TestActivity onResume------

c.再切换回竖屏的情况下:

07-24 08:55:02.099: I/System.out(18936): ------ TestActivity onPause------

07-24 08:55:02.109: I/System.out(18936): ------ TestActivity onSaveInstanceState------

07-24 08:55:02.119: I/System.out(18936): ------ TestActivity onStop------

07-24 08:55:02.129: I/System.out(18936): ------ TestActivity onDestroy------

07-24 08:55:02.139: D/memalloc(18936): /dev/pmem: Unmapping buffer base:0x5c7c5000 size:4608000 offset:3072000

07-24 08:55:02.139: D/memalloc(18936): /dev/pmem: Unmapping buffer base:0x5cc30000 size:9216000 offset:7680000

07-24 08:55:02.179: I/System.out(18936): ------ TestActivity onCreate------

07-24 08:55:02.249: I/System.out(18936): ------ TestActivity onStart------

07-24 08:55:02.289: I/System.out(18936): ------ TestActivity onRestoreInstanceState------

07-24 08:55:02.309: I/System.out(18936): ------ TestActivity onResume------

发觉上面的结果是跟网上的朋友说的不是一样的,原来是有区别的。

到后来去网上搜索了一下资料发觉,到了。4.0以后。要加上这样的配置才会使Activity的生命周期不会重新被调用

3)配置android:configChanges="keyboardHidden|orientation|screenSize"  (4.0以后)

a.正常情况下:

07-24 08:54:05.059: I/System.out(18936): ------ TestActivity onCreate------

07-24 08:54:05.199: I/System.out(18936): ------ TestActivity onStart------

07-24 08:54:05.219: I/System.out(18936): ------ TestActivity onResume------

b.切换横屏情况下:

07-24 09:08:21.639: I/System.out(19533): ------ TestActivity onConfigurationChanged------

c.再切换回竖屏的情况下:

07-24 09:08:21.639: I/System.out(19533): ------ TestActivity onConfigurationChanged------

总结:要想Activity在横竖屏切换的时候不重新加载生命周期的重要方法,一定要加上配置

4.0之前

<activity .....

android:configChanges="orientation|keyboardHidden"

>

4.0之后

<activity .....

android:configChanges="keyboardHidden|orientation|screenSize"

>

------------------------------------------------------常用设置---------------------------------------------------------

1.如果你的app指定要横屏显示的话

<activity .....

android:screenOrientation="portrait"

>

2.如果你的app指定要竖屏显示的话

<activity .....

android:screenOrientation="landscape"

>

时间: 2024-10-20 08:07:12

android 横竖屏和布局问题的相关文章

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

第一,横竖屏切换连带横竖屏布局问题: 如果要让软件在横竖屏之间切换,由于横竖屏的高宽会发生转换,有可能会要求不同的布局. 可以通过以下两种方法来切换布局: 1)在res目录下建立layout-land和layout-port目录,相应的layout文件名不变,比如:layout-land是横屏的layout,layout-port是竖屏的layout,其他的不用管,横竖屏切换时程序调用Activity的onCreate方法中的setOnContent(xxx),并自动加载相应的布局. 2)假如布

Android横竖屏布局总结

Android横竖屏要解决的问题应该就两个:一.布局问题;二.重新载入问题. 1.布局问题:如果不想让软件在横竖屏之间切换,最简单的办法就是在项目的 AndroidManifest.xml中找到你所指定的activity中加上android:screenOrientation属性,他有以下几个参数: "unspecified" 默认值 由系统来判断显示方向.判定的策略是和设备相关的,所以不同的设备会有不同的显示方向. "landscape" 横屏显示(宽比高要长)

Android横竖屏总结(转)

Android横竖屏总结(转) 横竖屏切换后Activity会重新执行onCreat函数,但是在Android工程的Mainfest.xml中加入android:screenOrientation="user" android:configChanges="orientation|keyboardHidden"之后,横竖屏切换之后就不会去执行OnCreat函数了,而是会去调用onConfigurationChanged(),这样我们就能控制横竖屏的切换了.或者在re

Android横竖屏切换处理

Android横竖屏要解决的问题应该就两个: 1.布局问题:2.重新载入问题   一.布局问题: 如果不想让软件在横竖屏之间切换,最简单的办法就是在项目的AndroidManifest.xml中找到你所指定的activity中加上android:screenOrientation属性,他有以下几个参数: "unspecified":默认值 由系统来判断显示方向.判定的策略是和设备相关的,所以不同的设备会有不同的显示方向. "landscape":横屏显示(宽比高要长

Android横竖屏切换总结

Android横竖屏切换总结(Android资料) Android横竖屏要解决的问题应该就两个: 一.布局问题 二.重新载入问题 1.布局问题:如果不想让软件在横竖屏之间切换,最简单的办法就是在项目的AndroidManifest.xml中找到你所指定的activity中加上android:screenOrientation属性,他有以下几个参数: "unspecified":默认值 由系统来判断显示方向.判定的策略是和设备相关的,所以不同的设备会有不同的显示方向. "lan

Android横竖屏总结全

Android横竖屏要解决的问题应该就两个: 一.布局问题 二.重新载入问题 1.布局问题:如果不想让软件在横竖屏之间切换,最简单的办法就是在项目的AndroidManifest.xml中找到你所指定的activity中加上android:screenOrientation属性,他有以下几个参数: "unspecified":默认值 由系统来判断显示方向.判定的策略是和设备相关的,所以不同的设备会有不同的显示方向. "landscape":横屏显示(宽比高要长) &

android横竖屏切换时Activity的生命周期

1.新建一个Activity,并把各个生命周期打印出来 2.运行Activity,得到如下信息 onCreate--> onStart--> onResume--> 3.按crtl+f12切换成横屏时 onSaveInstanceState--> onPause--> onStop--> onDestroy--> onCreate--> onStart--> onRestoreInstanceState--> onResume--> 4.再

android 横竖屏限制如何配置

在开发android的应用中,有时候需要限制横竖屏切换.只需要在AndroidManifest.xml文件中加入android:screenOrientation属性限制. ndroid:screenOrientation="landscape"是限制此页面横屏显示, ndroid:screenOrientation="portrait"是限制此页面数竖屏显示. 例如:我现在想让所有的页面不管怎么样都竖屏显示,则我的AndroidManifest.xml应该这样写:

让Android横竖屏切换时不销毁当前activity

网上查到资料: 对 节点<activity/> 添加属性“ android:configChanges="orientation|keyboardHidden|screenSize" ”,如下所示: 1 <activity 2 android:name=".MainActivity" 3 android:label="@string/app_name" 4 android:configChanges="orientat