在应用层的横竖屏切换

开发Android的apk的时候,可能会遇到横竖屏的问题。这里提供了一些在上层操作的时候,可能遇到的一些关于横竖屏的问题。
如果开发者的软件并不需要横竖屏,可以强制横竖屏。


强制横竖屏


1.最简单的方法

在AndroidManifest.xml的activity中添加

android:screenOrientation="portrait"//强制竖屏
android:screenOrientation="landscape"//强制横屏

2.在代码中添加

 if(getRequestedOrientation()!=ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE){
  setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}//不是横屏强制横屏
 if(getRequestedOrientation()!=ActivityInfo.SCREEN_ORIENTATION_PORTRAIT){
  setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LPORTRAIT);
}//不是竖屏强制竖屏


自适应横竖屏


1.设置两套layout

方法一

最简单的方法
把layout中分成两个文件layout-land和layout-port然后在这两个文件中,加入名字相同的布局文件。
系统会自动获取。
然后本人亲测有效。

方法二

写在layout里两个布局文件。
在onCreat()的时候
这个是在onCreat()的时候就选择横竖屏

Configuration config =this.getResources().getConfiguration();
if(config.orientation==Configuration.ORIENTATION_LANDSCAPE){
     setContentView(R.layout.wait);
}
else{
    setContentView(R.layout.wait2);
}

但是这两种方法都会重新起一次onCreate
为什么会这样,可以看一下
横竖屏之后的生命周期。
这篇文章
http://www.blogjava.net/lincode/archive/2011/09/16/358768.html


2.拦截掉onCreate的方法

拦截的方法只能在方法二的情况下拦截

1.在AndroidManifest.xml中

android:configChanges="orientation|screenSize|keyboardHidden"
//orientation方向变化
//screenSize屏幕大小变化
//keyboardHidden键盘变化(这个好像没有多少了)

这一句是为了当orientation,screensize和keyboardhidden的时候获得configchange

2.用onConfigurationChanged去拦截

    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
         if(this.getResources().getConfiguration().orientation ==Configuration.ORIENTATION_LANDSCAPE) {
             setContentView(R.layout.wait);
         } else if(this.getResources().getConfiguration().orientation ==Configuration.ORIENTATION_PORTRAIT) {
             setContentView(R.layout.wait2);  
         }
   }

3.修改对UI的操作

但是问题又来了,一旦onConfigurationChanged之后,等于说onCreate里的没有执行。但是布局文件都变了,之前对页面的UI操作都没有了。
所以要在onCongigurationChanged之后把对页面的UI操作都补回。









你可能感兴趣的:(androidUI)