屏幕方向 横竖屏切换

屏幕方向的控制

屏幕方向是对Activity而言的,你可以在AndroidManifest.xml 文件中,通过activity的android:screenOrientation属性进行设定。在此配置的值会反映在Activity的getRequestedOrientation()方法的返回值中,与之对应的setRequestedOrientation()方法可以动态改变该属性的值。

另外, 还可以通过Configuration对象来取得Activity当前的显示方向

取值:

  • unspecified 默认值,由系统来选择方向。
  • user 使用用户当前首选的方向。
  • behind 使用Activity堆栈中与该Activity之下的那个Activity的相同的方向。
  • landscape 横向显示,宽度比高度要大,一般游戏采用这个
  • portrait 纵向显示,高度比宽度要大,基本上都是这个
  • reverseLandscape 与正常的横向方向相反显示,在API Level 9中被引入。
  • reversePortrait 与正常的纵向方向相反显示,在API Level 9中被引入。
  • sensorLandscape 横向显示,但是基于设备传感器,既可以是按正常方向显示,也可以反向显示,在API Level 9中被引入。
  • sensorPortrait 纵向显示,但是基于设备传感器,既可以是按正常方向显示,也可以反向显示,在API Level 9中被引入。
  • sensor 显示的方向是由设备的方向传感器来决定的。显示方向依赖与用户怎样持有设备;当用户旋转设备时,显示的方向会改变。但是,默认情况下,有些设备不会在所有的四个方向上都旋转,因此要允许在所有的四个方向上都能旋转,就要使用fullSensor属性值。
  • fullSensor 显示的方向(4个方向)是由设备的方向传感器来决定的,除了它允许屏幕有4个显示方向之外,其他与设置为sensor时情况类似,不管什么样的设备,通常都会这么做。例如,某些设备通常不使用纵向倒转或横向反转,但是使用这个设置,还是会发生这样的反转。这个值在API Level 9中引入。
  • nosensor 屏幕的显示方向不会参照物理方向传感器。传感器会被忽略,所以显示不会因用户移动设备而旋转。除了这个差别之外,系统会使用与unspecified设置相同的策略来旋转屏幕的方向。

android:screenOrientation属性详见:http://www.android-doc.com/guide/topics/manifest/activity-element.html

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

包青天实测:

1、什么都不设置

每次都会,且只会,调用oncreate方法
2、设置android:configChanges="keyboardHidden|orientation|screenSize"

每次都会,且只会,调用onConfigurationChanged方法

3、设置android:configChanges="orientation"

  • 竖-横:先调用onConfigurationChanged接着调用oncreate
  • 横-竖:只调用onConfigurationChanged

注意:

在设置Activity的android:configChanges="orientation|keyboardHidden"后,横竖屏还是一样会重新调用各个生命周期的方法,因为screen size也跟着设备的横竖切换在改变。所以,在AndroidManifest.xml里设置的MiniSdkVersion和 TargetSdkVersion属性大于等于13的情况下,如果你想阻止程序在运行时重新加载Activity,除了设置"orientation", 你还必须设置"ScreenSize"。

android:configChanges属性详见:http://www.android-doc.com/guide/topics/manifest/activity-element.html

测试代码

public class MainActivity extends Activity {

private TextView tv;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

tv = (TextView) findViewById(R.id.tv);

Log.i("bqt", "++++++我是onCreate方法");

}

@Override

public void onConfigurationChanged(Configuration newConfig) {

super.onConfigurationChanged(newConfig);

Log.i("bqt", "++++++我是onConfigurationChanged方法");

if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) tv.setText("横屏");

else tv.setText("竖屏");//这个地方可能执行不到

}

}


<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

<TextView

android:id="@+id/tv"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:hint="横竖屏切换测试"

android:textSize="14sp" />

<EditText

android:id="@+id/et"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:hint="不设置id时横竖屏切换不会保存输入的内容"

android:textSize="14sp" />

<EditText

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:hint="我就没有设置id"

android:textSize="14sp" />

</LinearLayout>

来自为知笔记(Wiz)

时间: 2024-10-17 11:12:23

屏幕方向 横竖屏切换的相关文章

Android应用:横竖屏切换总结

眨眼间,已经到了2016你年春节前,离上一篇博客的时间已经有6个月多,回想起这半年的种种,不得不说,学习和工作实在是太忙了,或许这就是程序员的真实写照吧. 写博客之初,主要的目的还是为了把自己的学习痕迹记录下来,写的东西比较基础,也不多,算是一种督促,希望能坚持地学习下去,因为学识不存在暴发户,靠的是积累.如果对自己过去半年的学习给个评价,我还是比较满意的,前期定下来的目标都基本都达到了.单凭这个,我就觉得今年的新年会是个好年. 说完过去,那么接着就是将来.因为现在的工作环境上外网不大方便,而且

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

(转自:http://www.cnblogs.com/franksunny/p/3714442.html) (老样子,图片啥的详细文档,可以下载后观看 http://files.cnblogs.com/franksunny/635350788930000000.pdf) Android手机或平板都会存在横竖屏切换的功能,通常是由物理重力感应触发的,但是有时候也不尽然,通常在设置里面我们可以对手机的横竖屏切换进行关闭,操作界面如下 只需要点击下“屏幕旋转”按钮就可以关闭横竖屏切换了. 一.禁止AP

Activity横竖屏切换

默认情况下,当"屏幕方向"或"键盘显示隐藏" 变化时都会销毁当前Activity,创建新的Activity. 如果不希望重新创建Activity实例,可以按如下配置Activity: <activity android:name=".MainActivity" android:configChanges="keyboardHidden|orientation"> 注意Android3.2横竖屏幕切换时以上配置con

Android 横竖屏切换小结

转自:http://www.cnblogs.com/franksunny/p/3714442.html (老样子,图片啥的详细文档,可以下载后观看 http://files.cnblogs.com/franksunny/635350788930000000.pdf) Android手机或平板都会存在横竖屏切换的功能,通常是由物理重力感应触发的,但是有时候也不尽然,通常在设置里面我们可以对手机的横竖屏切换进行关闭,操作界面如下 只需要点击下“屏幕旋转”按钮就可以关闭横竖屏切换了. 一.禁止APP内

Android横竖屏切换处理

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

Android横竖屏切换总结

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

安卓横竖屏切换问题总结

如果不想让软件在横竖屏之间切换: 可以通过在AndroidManifest.xml中设置activity中的android:screenOrientation属性值来实现. 比如下列设置 android:screenOrientation="portrait" 则无论手机如何变动,拥有这个属性的activity都将是竖屏显示. android:screenOrientation="landscape",为横屏显示. 上述修改也可以在Java代码中通过类似如下代码来设

cocos2d-x游戏开发屏幕横竖屏切换

android解决方案: 1.在游戏的主activity中编写一个静态方法(继承Cocos2dxActivity) public static void changedActivityOrientation(int orientation){ switch(orientation) { case 1://横屏 instance.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); break; case 2://竖

Activity嵌套多个Fragment实现横竖屏切换

一.上图 二.需求 近期项目遇到个横竖屏切换的问题,较为复杂,在此记之. 1.Activity中竖屏嵌套3个Fragment,本文简称竖屏FP1,FP2,FP3. 2.其中竖屏FP1与FP2可以切换为横屏的FL1,FL2,即竖屏FP1切换到对应的横屏FL1,竖屏FP2对应切换到横屏FL2. 3.FP3不允许横竖屏切换. 4.竖屏FP1,FP2,FP3用ViewPager实现左右滑动切换. 5.横屏的FL1,FL2用布局中的切换按扭实现左右切换,不允许滑动切换. 看到这需求有点儿晕菜了吧!!!呵呵