关于屏幕适配

来源:互联网 发布:ubuntu软件中心搜索框 编辑:程序博客网 时间:2024/06/03 17:59
支持多种屏幕
运行Android的各种提供不同的屏幕大小和密度的设备。对于应用程序,Android系统提供了一致的开发环境,跨设备和处理大部分工作的每个应用程序的用户界面调整,以在其上显示的画面。同时,系统提供API,允许您控制您的应用程序UI特定的屏幕尺寸和密度,以优化不同的屏幕配置你的UI设计.

相关概念
什么是dp、dip、dpi、sp、px?之间的关系是什么?
dip:Density Independent Pixels(密度无关像素)的缩写。以160dpi为基准,1dp=1px
dp:同dip
dpi:屏幕像素密度的单位,“dot per inch”的缩写
px:像素,物理上的绝对单位
sp:Scale-Independent Pixels的缩写,可以根据文字大小首选项自动进行缩放。Google推荐我们使用12sp以上的大小,通常可以使用12sp,14sp,18sp,22sp,最好不要使用奇数和小数。


1.屏幕尺寸
实际的物理尺寸,作为画面的对角线测得的。
为简单起见,Android将所有实际屏幕尺寸为广义的大小:小,中,大,特大。

屏幕尺寸指屏幕的对角线的长度,单位是英寸,1英寸= 2.54厘米
比如常见的屏幕尺寸有2.4,2.8,3.5,3.7,4.2,5.0,5.5,6.0等
2.方向
屏幕但从用户的角度的方向。这是横向或纵向,即屏幕的宽高比可以是宽或高的分别。注意,不仅做不同的设备在缺省情况下,不同的方向操作,但是,当用户旋转设备的取向可以在运行时改变。

3.解析度
总数在屏幕上的物理像素。如果要增加对多屏幕的支持,应用程序并不直接与分辨率的工作; 应用程序应该只与屏幕尺寸和密度而言,如通过广义的尺寸和密度分组。
屏幕分辨率是指在横纵向上的像素点数,单位是像素,1像素= 1个像素点。一般以纵向像素*横向像素,如1960年* 1080
4.密度独立像素(DP)
定义UI布局时,使用DP,以表达布局尺寸或位置的密度无关的方式的虚拟像素单元。
密度独立像素相当于一个物理像素160 dpi(每英寸像素)的屏幕,这是由系统为“中等”密度屏幕假定基准密度上。在运行时,系统透明地处理在必要时dp单位中的任意缩放,根据所使用的屏幕的实际密度。DP的单位屏幕像素转换很简单: px = dp * (dpi / 160)。例如,一个240 dpi的屏幕上,1 DP等于1.5的物理像素。定义你的应用程序的UI时,你应该总是使用dp单位,以确保不同密度的屏幕UI的正确显示。

广义上的密度
LDPI(低)〜120DPI
MDPI(中)〜160dpi
华电国际(高)〜240dpi
xhdpi(超高)〜320dpi
xxhdpi(超特高)〜480dpi
xxxhdpi(超超特高)〜640dpi

支持多屏幕

1.明确声明其屏幕尺寸您的应用程序支持清单
通过声明其屏幕尺寸应用程序支持,可以确保与您的支持可以下载你的应用程序屏幕,只有设备。针对不同屏幕尺寸的支持声明也可以影响系统如何吸引你的大屏幕,特别是应用程序,应用程序是否在运行屏幕兼容模式。
要声明的屏幕尺寸您的应用程序支持,你应该包括 <supports-screens>在你的清单文件的元素。

<supports-screens android:resizeable=["true"| "false"]        <支持屏安卓:调整大小 = [“真” | “假” ]
android:smallScreens=["true" | "false"]                    android:小屏幕 = [“真” | “假” ] 
android:normalScreens=["true" | "false"]                   android:普通屏幕= [“真” | “假” ]
android:largeScreens=["true" | "false"]                  android :大屏幕 = [“真“ | ”假“ ]
android:xlargeScreens=["true" | "false"]                    android :超大屏幕 = [”真“ | ”假“ ]
android:anyDensity=["true" | "false"]                    android:任意密度= [”真“ | ”假“ ]
android:requiresSmallestWidthDp="integer"                 android:所需最小宽度像素= ” 整数 “
android:compatibleWidthLimitDp="integer"                 android:兼容极限宽度像素= ” 整数 “
android:largestWidthLimitDp="integer"/>                  android兼容最大宽度像素= “ 整数 ” />>


2.为不同的屏幕尺寸设置不同的屏幕布局
默认情况下,Android的重新调整你的应用程序布局,以适应当前的设备屏幕。在大多数情况下,这工作正常。在其他情况下,您的UI可能看起来不那么好,可能需要针对不同屏幕尺寸的调整.
①使用wrap_content、math_parent、weight
     wrap_content:根据控件的内容设置控件的尺寸
     math_parent:根据父控件的尺寸大小设置控件的尺寸
     weight:权重,在线性布局中可以使用weight属性设置控件所占的比例

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="horizontal">


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="80dp"
        android:layout_weight="1"
        android:background="#028330"/>


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="80dp"
        android:layout_weight="3"
        android:textSize="22sp"/>


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="80dp"
        android:layout_weight="1"
        android:background="#fffb00"
        android:textSize="18sp"/>
</LinearLayout>




②使用相对布局,禁用绝对布局
在开发中,我们大部分时候使用的都是线性布局,相对布局和帧布局,绝对布局由于适配性极差,所以极少使用。
由于各种布局的特点不一样,所以不能说哪个布局好用,到底应该使用什么布局只能根据实际需求来确定。
③使用尺寸限定符
当我们要在大屏幕上显示不同的布局,就要使用large限定符。例如,在宽的屏幕左边显示列表右边显示列表项的详细信息,在一般宽度的屏幕只显示列表,不显示列表项的详细信息,我们就可以使用large限定符。
res/layout/main.xml 单面板:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent">
  <!-- 列表 -->
  <fragment android:id="@+id/headlines"
            android:layout_height="fill_parent"
            android:name="com.example.android.newsreader.HeadlinesFragment"
            android:layout_width="match_parent" />
</LinearLayout>
res/layout-large/main.xml 双面板:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="horizontal">
  <!-- 列表 -->
  <fragment android:id="@+id/headlines"
            android:layout_height="fill_parent"
            android:name="com.example.android.newsreader.HeadlinesFragment"
            android:layout_width="400dp"
            android:layout_marginRight="10dp"/>
  <!-- 列表项的详细信息 -->
  <fragment android:id="@+id/article"
            android:layout_height="fill_parent"
            android:name="com.example.android.newsreader.ArticleFragment"
            android:layout_width="fill_parent" />
</LinearLayout>
如果这个程序运行在屏幕尺寸大于7inch的设备上,系统就会加载res/layout-large/main.xml而不是res/layout/main.xml,在小于7inch的设备上就会加载res/layout/main.xml。
需要注意的是,这种通过large限定符分辨屏幕尺寸的方法,适用于android3.2之前。在android3.2之后,为了更精确地分辨屏幕尺寸大小,Google推出了最小宽度限定符。

3.提供不同的屏幕密度不同的位图资源
默认情况下,Android的扩展您的位图资源(.png,.jpg,和.gif文件)和九宫格可绘制(.9.png文件),以便使它们在每个设备上相应的物理尺寸。例如,如果你的应用程序只为基线提供的位图资源,中型屏幕密度(MDPI),那么系统扩展它们的高密度屏幕上时,鳞下来低密度屏幕上时。这种调整可能会导致在位图文物。为了确保您的位图看起来是最好的,你应该包括替代版本在不同的屏幕密度不同的分辨率。
该配置预选赛(下文中详细描述),您可以使用特定密度资源ldpi(低), mdpi(中), hdpi(高),xhdpi超高), xxhdpi (超超高)和xxxhdpi(超预算外超高)。例如,对于高密度屏幕的位图应该去drawable-hdpi/。



0 0
原创粉丝点击