Android横竖屏要解决的问题应该就两个:

一.布局问题

二.重新载入问题

1.布局问题:如果不想让软件在横竖屏之间切换,最简单的办法就是在项目的AndroidManifest.xml中找到你所指定的activity中加上android:screenOrientation属性,他有以下几个参数:

"unspecified":默认值 由系统来判断显示方向.判定的策略是和设备相关的,所以不同的设备会有不同的显示方向.
"landscape":横屏显示(宽比高要长)
"portrait":竖屏显示(高比宽要长)
"user":用户当前首选的方向
"behind":和该Activity下面的那个Activity的方向一致(在Activity堆栈中的)
"sensor":有物理的感应器来决定。如果用户旋转设备这屏幕会横竖屏切换。
"nosensor":忽略物理感应器,这样就不会随着用户旋转设备而更改了("unspecified"设置除外)。

也可以在Java代码中通过setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)来设置。

如果要让软件在横竖屏之间切换,由于横竖屏的高宽会发生转换,有可能会要求不同的布局。可以通过以下方法来切换布局:

1)在res目录下建立layout-land和layout-port目录,相应的layout文件不变,比如main.xml。layout-land是横屏的layout,layout-port是竖屏的layout,其他的不用管,模拟器会自动寻找。

2)通过 this.getResources().getConfiguration().orientation来判断当前是横屏还是竖屏然后来加载相应的 xml布局文件。因为当屏幕变为横屏的时候,系统会重新呼叫当前Activity的onCreate方法,你可以把以下方法放在你的onCreate中来检查当前的方向,然后可以让你的setContentView来载入不同的layout xml.
if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){     Log.i("info", "landscape"); // 横屏} else if (this.getResources().getConfiguration().orientation ==Configuration.ORIENTATION_PORTRAIT) {     Log.i("info", "portrait"); // 竖屏}
在onConfigurationChanged()方法中也可以检测拥有硬键盘的键盘状态
//检测实体键盘的状态:推出或者合上   if (newConfig.hardKeyboardHidden ==Configuration.HARDKEYBOARDHIDDEN_NO){   //实体键盘处于推出状态,在此处添加额外的处理代码}else if (newConfig.hardKeyboardHidden ==Configuration.HARDKEYBOARDHIDDEN_YES){   //实体键盘处于合上状态,在此处添加额外的处理代码}

2.重新载入问题。如果不需要从新载入,可以在AndroidManifest.xml中加入配置 android:configChanges="orientation|keyboardHidden",配置 android:configChanges的作用就是如文档所说的:Specify one or more configuration changesthat the activity will handle itself. If not specified, the activity will berestarted if any of these configuration changes happen in the system。这样在程序中Activity就不会重复的调用onCreate()甚至不会调用onPause、onResume.只会调用一个 onConfigurationChanged(Configuration newConfig)。如果需要重新载入,则不需要做任何修改。不过如果需要在重新载入过程中保存之前的操作内容或数据,则需要保存之前的数据。然后在 activity的onCreate()中取出来。当然,如此就不能设置android:configChanges()了,否则就不会调用 onCreate()方法。

如果要彻底禁止翻转,可以设置android:screenOrientation的属性为nosensor,如此就可以忽略重力感应带来的麻烦了。不过在模拟器上不管用,在真机上是正确的。android:screenOrientation="portrait"

则无论手机如何变动,拥有这个属性的activity都将是竖屏显示。

android:screenOrientation="landscape",为横屏显示。

这里提一个小知识,Android模拟器中,快捷键"Ctrl+F11/F12"可以实现转屏


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

 // 通过Configuration对象 确认当前显示方向       Configuration conf = getResources().getConfiguration();        String orientName = "undefined";        switch (orient) {        case Configuration.ORIENTATION_LANDSCAPE:           orientName = "landscape";        case Configuration.ORIENTATION_PORTRAIT:            orientName = "portrait";        case Configuration.ORIENTATION_SQUARE:          orientName = "square";       default:          orientName = "undefined";       }    Logger.get().i("conf.orient:" + orientName);


更多相关文章

  1. Android基础-四种基本布局和自定义控件的步骤
  2. Android中的四种布局
  3. Android中软键盘弹出时底部布局上移问题
  4. Android之TabLayout布局的使用
  5. android中的键盘处理
  6. Android Studio App设置线性布局LinerLayout控件垂直/水平方向排

随机推荐

  1. android仿qq分组列表效果
  2. android包重复问题
  3. android根据应用方向自动旋转的自定义vie
  4. Android录音及播放功能实现
  5. Android 文件操作工具类
  6. Unity3d 调用Android震动
  7. Android通过Mainfest设置Theme实现布局全
  8. Android 开发艺术探索 源码地址
  9. android Error inflating class com.goog
  10. Android 自定义控件 按钮滚动选择