`
wjmming
  • 浏览: 57260 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

Android 支持多屏幕机制

阅读更多

术语
   1.Screen size 屏幕实际尺寸。
Android讲屏幕实际尺寸分为3个通用的尺寸。
  
   2.Aspect ratio 长宽比

   3.Resolution 分辨率

   4.Density 密度

   5.Density-independent pixel 密度无关的像素

介绍:Adnroid1.6或以上SDK,在AndroidManifest.xml中提供新的一个元素<supports-screens>用于支持多屏幕机制。
<supports-screens
          android:largeScreens="true"   是否支持大屏
          android:normalScreens="true"  是否支持中屏
          android:smallScreens="true"   是否支持小屏
          android:anyDensity="true"     是否支持多种不同密度
/>


Android提供3种方式处理屏幕自适应
一.预缩放的资源 ( 基于尺寸和密度去寻找图片,其实就是找res文件夹下的资源 )
1.如果找到相应的尺寸和密度,则利用这些图片进行无缩放显示。

 

2.如果找到相应的尺寸,但是找不到密度,则尝试找该尺寸下其他密度资源进行缩放(从高到低)。

 

3.如果没法找到相应的尺寸,则忽略所有包含尺寸目录,直接找只包含密度目录。

   如果找到匹配密度,资源缩放则利用这些图片进行无缩放显示。

 

4.如果都无法匹配,则使用默认图片进行缩放显示。默认图片默认标配 "medium" (160)。

 

5.如果"medium" (160)没有资源,则再到其他密度资源包中找,并缩放显示(从高到低)。

二.自动缩放的像素尺寸和坐标(密度兼容)
1.如果应用程序不支持不同密度android:anyDensity="false",系统自动缩放图片尺寸和这个图片的坐标。

 

2.对于预缩放的资源,当android:anyDensity="false",系统还是会尝试去匹配尺寸和密度。

         1.如果找到相应的尺寸和密度,则利用这些图片进行无缩放显示。

 

         2.如果找到相应的尺寸,但是找不到密度,则尝试找该尺寸下其他密度资源进行缩放(从高到低)。


         3.如果没法找到相应的尺寸,则忽略所有包含尺寸目录,直接找只包含密度目录。

            如果找到匹配密度,资源缩放则利用这些图片进行无缩放显示。

 

         4.如果都无法匹配,则使用默认图片进行缩放显示。默认图片默认标配 "medium" (160)。

 

         5.如果"medium" (160)没有资源,则再到其他密度资源包中找,并缩放显示(从高到低)。

 

3.android:anyDensity="false",只对密度兼容起作用,尺寸兼容没效果

 

自己加上

 

4.关于取图片宽度和高度问题。

      1.符合屏幕dpi的图片,通过Bitmap类取高度和宽度数值时,数值跟图片原本大小一样。

      2.符合屏幕dpi的图片,通过Drawable类取Intrinisc高度和宽度数值时,数值大小会根据BitmapScale / TargetDensityScale比值变化。

     3.不符合屏幕dpi的图片,通过Bitmap类取高度和宽度数值时,数值是系统缩放后的数字。

     4.不符合屏幕dpi的图片,通过Drawable类取Intrinisc高度和宽度数值时,数值大小会根据BitmapScale / TargetDensityScale比值变化。

 

     注明:BitScale = 图评dpi实际密度,TargetDensityScale = 屏幕实际密度。

 

三.兼容模式显示在大屏幕,尺寸(尺寸兼容)
1.对于你在<supports-screens>声明不支持的大屏幕,而这个屏幕尺寸是larger的话,系统同样使用尺寸为                   ("normal")和密度为("medium)显示,不过会出现一层黑色的背景。不是居中显示。


密度独立:
系统默认应用支持DIP单位的,三个使用DIP的地方:
1.加载资源时,使用DIP实现预缩放的资源。
2.在Layout使用DIP,系统自动完成缩放。
3.在应用程序中,自动缩放一些绝对像素。
    (只有在android:anyDensity="false"生效)即屏幕自适应方式二
4.像素单位都使用DIP,文本单位使用SP

最佳屏幕独立实践:
1.使用wrap_content, fill_parent 和使用dip作为像素单位in XML layout files。
2.避免使用AbsoluteLayout
3.在代码中,不要使用像素数字硬编码,而是要通过dip转换为px。
    例子:
   你使用手势分析器分析一个scroll手势,假如,你滚动的距离是16px。

   an inch = 2.54 cm
1.在一个160dip的屏幕中,你实际移动距离 16px / 160dpi = 1/10th of an inch (or 2.5 mm)
2.在一个240dip的屏幕中,你实际移动距离 16px / 240dpi = 1/15th of an inch (or 1.7 mm)
  // The gesture threshold expressed in dip
  private static final float GESTURE_THRESHOLD_DIP = 16.0f;
  // Convert the dips to pixels
  final float scale = getContext().getResources().getDisplayMetrics().density;
  mGestureThreshold = (int) (GESTURE_THRESHOLD_DIP * scale);
4.使用密度和/或尺寸特定资源(通过文件夹)


关于预缩放或者自动缩放图片或9格图
1.系统是一定对会资源包下的图片进行合理的缩放。
   例如:一张240x240高密度图片,显示在中密度的屏幕上,图片大小自动变为160x160。
2.如果你不想系统自动帮你缩放图片,可以建立一个res/drawable-nodpi文件夹,存放你的图片。
3.也可以通过BitmapFactory.Options 设置完成你想要的图片缩放等效果或9格图(在画图时)。
4.自动缩放图片比预缩放花费更多CPU。 

分享到:
评论

相关推荐

    4种Android屏幕自适应解决方案

    Android支持多屏幕机制即用为当前设备屏幕提供一种合适的方式来共同管理并解析应用资源。本文就介绍了4中Android屏幕自适应解决方案。 一、细说layout_weight 目前最为推荐的Android多屏幕自适应解决方案。 该...

    android手机屏幕共享软件

    在Android平台上,屏幕共享软件是一种非常实用的工具,它能够实时传输手机屏幕的内容,使得用户可以在其他设备上观看或记录Android设备的屏幕动态。这对于Android开发人员来说尤其有用,因为它们能够远程调试应用,...

    Android屏幕多点触摸

    在Android系统中,多点触摸(Multi-Touch)是一项关键特性,它允许用户同时使用两个或更多个手指进行交互,提供了更加丰富的用户界面体验。在本篇内容中,我们将深入探讨如何实现Android屏幕的多点触摸功能,并进行...

    android多屏幕多分辨率适配

    1. **使用不同的布局目录**:Android支持在res/layout目录下创建针对不同屏幕尺寸的子目录,如layout-small、layout-normal、layout-large和layout-xlarge。这样,系统会根据设备尺寸选择合适的布局文件。 2. **...

    Android自动适应屏幕源码

    首先,Android系统提供了多种机制来处理屏幕适配,如资源维度文件(dimens.xml)、布局权重(layout_weight)以及使用相对布局(RelativeLayout)或约束布局(ConstraintLayout)。这些工具允许开发者定义不同屏幕...

    android自动适应屏幕源码

    此外,Android支持多套资源目录(如layout-mdpi, layout-hdpi等),开发者可以为不同屏幕尺寸和密度提供定制的布局。 2. **尺寸和密度适配** - **布局权重(layout_weight)**:在XML布局中,可以通过设置weight...

    Android 屏幕锁源码

    Android支持第三方开发者创建自定义锁屏应用。开发者可以通过`KeyguardService`和`KeyguardWidgetProvider`实现自己的解锁界面和验证逻辑。 7. **系统级集成**: 在Android系统的层次结构中,屏幕锁与`Activity...

    Android核心机制深入分析

    系统服务也是Android核心机制的重要组成部分,例如窗口管理器负责屏幕布局和交互,包管理器处理应用的安装和更新,电源管理服务优化设备的能源使用,位置服务提供定位功能,以及网络服务管理数据连接等。 深入理解...

    androidScreenShareAndControl, android屏幕共享及远程控制.zip

    Android支持硬件编码,通过`MediaCodec`类可以利用设备的硬件加速能力,提高编码效率。传输则可通过WebSocket、TCP/IP或其他实时通信协议完成,确保数据的实时性和稳定性。 3. **远程控制机制** 远程控制通常涉及...

    Android 提高篇 机制 分析

    ### Android提高篇机制分析 #### 一、设计方法论探讨之设计意图 在探索Android复杂的内部运作时,首要任务是从宏观角度理解其设计理念与架构。本文档试图从设计师的角度出发,探讨Android系统的构建思路。 ##### ...

    Android软件自适应屏幕技巧

    - **提示**:从Android 1.6版本开始,可以通过在`AndroidManifest.xml`文件中添加`&lt;supports-screens&gt;`标签来支持多屏幕机制。例如: ```xml android:largeScreens="true" android:normalScreens="true" ...

    android支持多点触摸的DEMO

    这个“android支持多点触摸的DEMO”是专门为开发者提供的一个示例项目,它展示了如何在Android应用程序中实现多点触摸功能。这个DEMO可以在Eclipse集成开发环境中编译并运行,以验证多点触摸功能的正确性和有效性。 ...

    Android投屏,两个设备屏幕共享,互相投屏

    综上所述,Android设备之间的屏幕共享是一个涉及网络通信、媒体处理、协议控制等多个领域的复杂过程。通过合理利用Android提供的API和网络技术,开发者可以构建出高效、稳定的投屏解决方案。在实际开发过程中,还...

    Android屏幕自动调整亮度

    综上所述,“Android屏幕自动调整亮度”的实现涉及了系统配置、用户界面设置、核心服务组件以及动态调整策略等多个层面。通过细致的配置、合理的算法设计和高效的传感器管理,Android设备得以在各种光照环境下为用户...

    一个android桌面滑动切换屏幕的控件(二)

    然而,ScrollView并不支持水平滑动,因此不适合用于实现横向切换屏幕的效果。 接着,ViewPager是Android提供的一个用于在多个页面间滑动切换的组件,它通常与PagerAdapter一起使用。PagerAdapter负责管理每个页面的...

    android自适应屏幕demo

    1. **使用资源维度文件夹**:Android支持在不同的资源目录下放置特定尺寸和密度的图片、布局等资源,例如`res/layout-sw600dp`用于7英寸平板,`res/drawable-hdpi`用于高密度屏幕。通过这种方式,系统会自动选择最...

    Android 支持Sony X35屏幕的方法

    本教程主要讲解了如何使Android系统支持Sony X35屏幕,针对mini2440开发板进行适配。以下是对实现这一目标的具体步骤的详细解释: 1. **修改内核配置**: 在`/kernel/drivers/video/Kconfig`文件中,你需要找到...

    android锁屏机制

    9. **UnlockMethods**:Android支持多种解锁方式,如图案、PIN、密码、滑动、指纹等。每种解锁方式都有对应的解锁方法类,这些类实现了具体的验证逻辑。 10. **BiometricAuthentication**:随着生物识别技术的发展...

    Android应用源码滑动屏幕调整屏幕亮度-IT计算机-毕业设计.zip

    通过这份毕业设计,你将深入理解Android的事件处理机制、系统权限管理、UI动态更新以及与硬件交互的方式。同时,它还能锻炼你的问题解决能力和代码组织能力,对于提升Android开发技能大有裨益。

Global site tag (gtag.js) - Google Analytics