`
leecong1p
  • 浏览: 148221 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Android中正确自适应屏幕翻转

阅读更多

      大家都知道,很多Android手机带有重力感应传感器,能够对手机的翻转做出响应。比如应用在屏幕的自动翻转、重力感应游戏等方面。

      只要在androidmanifest.xml中对应的Activity中加入sensor属性即可实现屏幕自动翻转,如:

<
activity android:name=".demo"  
android:label="@string/app_name" 
android:screenOrientation="sensor"
>

 
      但是屏幕自动翻转也伴随着一个问题:当窗体切换或者布局切换时,Activity中OnCreate方法会被重复调用。一般OnCreate中会初始化一些数据,重复调用可能会产生意想不到的后果。解决方法如下:
      在androidmanifest.xml中的activit元素加入configChanges这个属性,比如

<
activity android:name="demo" 
android:configChanges="orientation|keyboardHidden" 
android:label="@string/app_name"
>

 
      另外,在Activity的Java文件中重载onConfigurationChanged(Configuration newConfig)这个方法,这样就不会在布局切换或窗口切换时重载onCreate等方法。代码如下:

    public void onConfigurationChanged(Configuration newConfig)
    { 
        super.onConfigurationChanged(newConfig); 
        if (this.getResources().getConfiguration().orientation ==  Configuration.ORIENTATION_LANDSCAPE)
        {
            //TO-DO
        }
        else if (this.getResources().getConfiguration().orientation ==   Configuration.ORIENTATION_PORTRAIT)
        {
           //TO-DO
        }
    } 

 

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

    /**
     * 屏幕改变时自动调用
   * @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);
    }

 


 

1
2
分享到:
评论

相关推荐

    android 自适应屏幕翻转

    ### Android自适应屏幕翻转详解 #### 一、引言 在移动开发领域,特别是针对Android平台的应用开发,实现良好的用户交互体验至关重要。其中,屏幕翻转功能是提升用户体验的关键特性之一,它允许应用程序根据设备的...

    android屏幕像素自适应问题

    在Android 1.5版本及以后,开发者可以通过创建针对不同屏幕尺寸和密度的资源文件夹来解决自适应问题。以下是关于Android屏幕适配的关键知识点: 1. **不同分辨率的layout文件夹**: Android系统允许开发者创建多个...

    cocos2d-x自适应屏幕分辨率 源码

    在`android`目录下,你可能会发现针对Android平台的特定适配代码,如在`AndroidManifest.xml`中配置支持的屏幕尺寸和密度,或者在Java层处理设备旋转等事件。 总之,cocos2d-x通过设计分辨率、显示模式和适当的资源...

    android 自适应屏幕

    在Android应用开发中,自适应屏幕是一项至关重要的任务,因为它确保应用能在各种尺寸和方向的屏幕上正常工作。本篇文章将详细介绍如何处理Android应用的屏幕自适应问题,包括横屏和竖屏的切换以及不同分辨率的适配。...

    关于自适应屏幕方向和大小的一些经验.zip

    在Android开发中,自适应屏幕方向和大小是至关重要的,因为Android设备的多样性使得应用程序需要在各种尺寸和方向的屏幕上都能良好运行。本压缩包包含了关于这个主题的文档和一个项目示例,让我们来深入探讨其中涉及...

    关于自适应屏幕方向和大小的一些经验(实用1).zip

    在Android开发中,自适应屏幕方向和大小是开发者必须面对的重要问题。这涉及到用户体验的优化,使得应用程序能在不同尺寸和方向的屏幕上都能正常且美观地显示。以下是一些关于自适应屏幕的关键知识点: 1. **屏幕...

    关于自适应屏幕方向和大小的一些经验毕业设计—(包含完整源码可运行).zip

    下面我们将详细探讨自适应屏幕方向和大小的相关知识点。 1. **响应式设计基础** 响应式设计是确保应用在不同屏幕尺寸和分辨率下都能正常工作的核心理念。它涉及布局、图片、字体等元素的动态调整,以适应屏幕的...

    Android编程实现屏幕自适应方向尺寸与分辨率的方法

    下面我们将详细探讨如何在Android编程中实现屏幕自适应方向尺寸与分辨率。 首先,我们来了解一下Android屏幕的基本概念。Android屏幕尺寸指的是屏幕的物理大小,通常以像素表示,如480x320或800x480。分辨率则是指...

    Android studio通过切换不同layout实现横竖屏适配

    2. 运行应用,然后在AVD的顶部菜单中选择旋转按钮或直接拖动边角来改变设备方向,观察布局是否正确切换。 3. 为了在真机上测试,可以将应用安装到支持横竖屏的设备上,手动旋转设备查看适配效果。 五、注意事项 1. ...

    surfaceview 支持横竖屏切换 视屏适配屏幕

    在Android应用开发中,SurfaceView是一种特殊的视图,它提供了直接与硬件图形渲染管道交互的能力,...在实际开发中,还需要考虑到性能优化和用户体验,例如处理屏幕旋转时的流畅性,以及在后台播放时的电池消耗等问题。

    解决Android中自定义DialogFragment解决宽度和高度问题

    当设备屏幕旋转或用户按下后退键时,DialogFragment能够正确处理其状态,避免数据丢失。同时,开发者可以像处理Fragment一样,将DialogFragment作为可复用的组件,根据屏幕大小显示不同的对话框内容。 在自定义...

    Html5自适应模板1101-1200

    弹性图片可以保持图片相对于容器的比例,即使在缩放或旋转设备时也能保持正确显示。 在提供的文件名列表中,我们看到如H1168、H1105等命名的文件,这些很可能是每个HTML5模板的标识。每个模板可能包含HTML、CSS和...

    Android 可视区域应用Demo源码.rar

    在Android开发中,"可视区域应用Demo源码"是一个典型的示例项目,它着重展示了如何在Android平台上管理和利用屏幕的可视区域。这个源码库可能是为了教导开发者如何有效地设计和优化用户界面,确保内容在不同尺寸和...

    android FlipImageView源码.rar

    3. 自适应屏幕:确保翻转效果在不同分辨率和屏幕方向下表现一致。 通过理解并运用FlipImageView的源码,开发者可以更灵活地定制和控制翻转动画,提升Android应用的交互性和趣味性。同时,这也为学习和研究Android...

    textView根据长度在屏幕中自动换行

    3. **自适应屏幕变化**: 若要在屏幕旋转等尺寸变化时自动调整,需要在`onConfigurationChanged`方法中重新计算`maxLines`。 ```java @Override public void onConfigurationChanged(Configuration newConfig) ...

    Android应用界面中绘制五角星的任务要求.pdf

    为了使五角星自适应屏幕方向,我们需要在`onMeasure()`方法中计算合适的大小。当屏幕方向改变时,系统会调用`onMeasure()`,在这里我们可以根据新的宽度和高度重新计算五角星的比例。确保五角星在横屏和竖屏模式下都...

    Android-Asignalrotationloadingview(一个信号旋转loadingview).

    5. 自适应布局:考虑到Android设备的多样性,加载视图需要能够在不同屏幕尺寸和分辨率的设备上正常显示。因此,开发者可能会使用相对布局(RelativeLayout)、线性布局(LinearLayout)或者约束布局...

    Android-Android动态的时速表UI控件

    2. **自适应布局**:为了确保在不同屏幕尺寸和分辨率的设备上都能正确显示,控件可能包含了对屏幕尺寸的适配策略,如使用dp单位而不是px,以及使用百分比布局或ConstraintLayout来适应屏幕变化。 3. **触摸事件处理...

    Android 购物选择颜色(尺码)实现

    使用`GridView`的优点在于它可以自适应屏幕大小,自动调整列数,使得布局在不同设备上都能保持良好的显示效果。 为了实现这个功能,我们需要进行以下步骤: 1. **UI设计**:使用XML布局文件创建`GridView`,并设置...

    Android展示圆形转盘的代码例子

    在Android开发中,创建一个圆形转盘的界面可以增加应用的互动性和趣味性,常见于游戏、抽奖或者个性化菜单的设计中。本示例代码着重于实现一个可触摸旋转的圆形转盘,通常会涉及到以下几个核心知识点: 1. **自定义...

Global site tag (gtag.js) - Google Analytics