Android(安卓)禁止屏幕旋转 & 旋转屏幕时保持Activity内容
在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,键盘辅助功能改变
public void onConfigurationChanged(Configuration newConfig) { // TODO Auto-generated method stubsuper.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);
}
更多相关文章
- Android(安卓)ListView中 每一项都有不同的布局
- Android(安卓)版本区别
- Android(安卓)MVVM模式入门
- 常用布局之相对布局
- Android(安卓)Jetpack Compose 最全上手指南 | 开发者说·DTalk
- Android(安卓)Studio 布局中引用自定义属性不提示的问题
- Android(安卓)开发笔记4-- 常用控件
- 防止屏幕锁屏
- 设计师 DPI 参考指南