您的位置:首页 > 移动开发 > Android开发

Android 禁止屏幕旋转 & 旋转屏幕时保持Activity内容

2014-08-18 17:45 501 查看
1.在应用中固定屏幕方向。

在AndroidManifest.xml的activity中加入:

android:screenOrientation=”landscape”

属性即可(landscape是横向,portrait是纵向)。

OK

2.随屏幕旋转时,不重新调用onCreate。


当将手机屏幕旋转时,系统会被强制重置启动onCreate方法。



1)修改AndroidManifest.xml



在activity属性中加入:

android:configChanges=”orientation|keyboardHidden”

android:configChanges,这个方法主要是负责列出清单,当清单上用户指定的设置改变时,Activity会自己处理这些变化。
orientation,屏幕界面旋转(可能是用户手动旋转的),【注意:如果你的开发API等级等于或高于13,你还需要设置screenSize,因为screenSize会在屏幕旋转时改变】
keyboardHidden,键盘辅助功能改变

2)在相对应的Activity中继承重写onConfigurationChanged方法,这个方法将会在我们的应用发生变化时,让我们能随心所谓地进行监听处理。

public void onConfigurationChanged(Configuration newConfig) {
        // TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
        if (newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE) {
           // Nothing need to be done here
            
        } else {
           // Nothing need to be done here
        }
        
       
    }

还有界面设计方面的问题,Android手机大部分是HVGA、WVGA的分辨率,屏幕视觉上比较“狭长”。往往竖着看很合适的布局,当屏幕横向翻转以后 显示会变得很别扭。当屏幕由竖直方向改变为横向时,我们可以把界面中的控件由本来的垂直线性布局修改为横向线性布局,这样布局会更合理一些。我们可以自己
写一个布局类集成LinearLayout布局,通过覆盖onMeasure方法来实现这种自动布局。当屏幕的宽高发生改变时,系统会调用 onMeasure方法。通过这个方法,我们可以获得改变以后的宽高尺寸,从而来实现屏幕翻转的自动布局,主要代码如下:

Java代码

/**

* 屏幕改变时自动调用

* @param widthMeasureSpec 改变后的宽度

* @param heightMeasureSpec 改变后的高度

*/

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)

{

/*宽度*/

int screenWith = View.MeasureSpec.getSize(widthMeasureSpec);

/*高度*/

int screenHeight = View.MeasureSpec.getSize(heightMeasureSpec);



/*竖直布局*/

if (screenWith < screenHeight)

{



this.setOrientation(VERTICAL);

for (int i = 0; i < getChildCount(); i++)

{

View childView = getChildAt(i);

if (childView instanceof CakyCanvas)

{

/*该控件占布局的2/5*/

LayoutParams params = new LayoutParams(screenWith,

screenHeight * 2/ 5

updateViewLayout(childView, params);

}

else if (childView instanceof CakyExplainCanvas)

{

/*该控件占布局的3/5*/

LayoutParams params = new LayoutParams(screenWith,

screenHeight * 3/ 5

updateViewLayout(childView, params);

}

}

}

/*横向布局*/

else

{



this.setOrientation(HORIZONTAL);

for (int i = 0; i < getChildCount(); i++)

{

View childView = getChildAt(i);

if (childView instanceof CakyCanvas)

{

LayoutParams params = new LayoutParams(

screenWith * 2/ 5

screenHeight);

updateViewLayout(childView, params);

}

else if (childView instanceof CakyExplainCanvas)

{

LayoutParams params = new LayoutParams(

screenWith * 3/ 5

screenHeight);

updateViewLayout(childView, params);

}

}

}

super.onMeasure(widthMeasureSpec, heightMeasureSpec);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: