Android——缩放因子及五种屏幕适配方案

一、关于切图

1、切一套(800*480)
一些小公司做的小应用可能只切了一套图,美工成本等原因。(不过导航页面——平铺满屏幕的大图,必须单独切图,因为图片拉伸影响效果)。

2、切两套(800*480,1280*720)
一般小公司可能只切了这两套图,适用世面上主流的手机屏幕了。

3、切多套图
大公司,每种分辨率,甚至每种手机都切一套图。

二、对应关系

ldpi      ------>  320*240
mdpi    ------>  480*320
hdip     ------>  480*800
xhdip   ------>  1280*720
xxhdip ------>  1920*1080
补充:像素密度->每一英寸物理屏幕区域内的像素点

三、dp与px的换算关系

5英寸手机(1280*720)
像素密度 : sqrt(1280*1280 + 720*720) / 5 = 294dpi

Android——缩放因子及五种屏幕适配方案_第1张图片
补充:1920*1080 ——> xxhdpi(3.0x)

由上图可知,该手机像素为xhdpi,缩放因子中2.0x表示 1dp 等于2个px,由此可得到dp与px的计算公式为:

dp = px/设备密度(缩放因子)

获取设备密度(缩放因子)代码:Activity.this.getResources().getDisplayMetrics().density; // 1280*720 下 = 2.0

四、屏幕适配方案

先在主流屏幕上进行开发如(1280*720),遵循的原则是:不用AbsoluteLayout(绝对布局),多用相对布局和线性布局(权重),用dp不直接用px。
开发后期,在不同分辨率的屏幕上测试(主要是480*800,1920*1080),如果没有出现太大问题(影响正常使用),就可以上线了。

1、图片适配(不常用)
不同的分辨率切不同的图。
注意:如果当前文件夹下没有找到需要加载的图片,到高分辨率文件夹找
缺点:apk过大

2、dimen尺寸适配(常用)
Android——缩放因子及五种屏幕适配方案_第2张图片

Android——缩放因子及五种屏幕适配方案_第3张图片

如上图所示,根据缩放因子1dp = 2*px, 要显示控件的宽度为屏幕的一半。 720px/2/2 = 180dp。
如果当前手机分辨率是1280*720,那么会去自动加载values-1280x720文件夹下的dimens.xml文件,如果是其他手机会默认加载values下的dimens.xml文件。注意:虽然values-1280x720下dimens.xml中设置了“width”的值,在values下的dimens.xml中也要设置“width”的默认值,不然会出现异常。

3、layout布局适配(不常用)
Android——缩放因子及五种屏幕适配方案_第4张图片

使用场景:当独为特定手机创建布局,如魅族3手机 1800*1080分辨率比较奇葩。
要适配1080*1800的屏幕则新建layout-1800x1080的文件夹,如果当前手机是1800*1080分辨率会去自动加载layout-1800*1080文件夹下的activity_main.xml布局文件。

4、java代码适配
获取屏幕宽高,按比例设置控件大小。
注意:找到当前控件的父控件,通过父控件设置当前控件的规则

package com.example.testandroid;

import android.app.Activity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.Window;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class MainActivity extends Activity {

    private TextView tv_text;
    private int screenWidth;
    private int screenHeight;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 去掉title
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        tv_text = (TextView) findViewById(R.id.tv_text);

        // 代码适配:将tv_text控件的宽高设置为屏幕的一半
        // 规则:找到当前控件的父控件,通过父控件设置当前控件的规则

        DisplayMetrics outMetrics = new DisplayMetrics();
        // 给outMetrics设置当前屏幕信息(宽(px),高(px))
        getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
        screenWidth = outMetrics.widthPixels;
        screenHeight = outMetrics.heightPixels;

        RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
                (int)(screenWidth*0.5 + 0.5), (int)(screenHeight*0.5 + 0.5));// +0.5 四舍五入

        tv_text.setLayoutParams(layoutParams);
    }

}

效果图:
Android——缩放因子及五种屏幕适配方案_第5张图片

5、权重适配(常用)

Android——缩放因子及五种屏幕适配方案_第6张图片

权重适配规则:
    1、适用于线性布局
    2、竖直方向上使用权重,使用权重的控件的默认高度设置为0dp。
    3、水平方向上使用权重,使用权重的控件的默认宽度设置为0dp。

你可能感兴趣的:(android,屏幕适配)