android随笔19——手机屏幕适配

手机屏幕适配

 

让应用在不同分辨率下的手机有较好的显示效果。

 

1. 图片适配: 根据手机的像素密度,选择不同drawable文件夹下的图片

2. dimens 尺寸 适配:根据手机的像素密度,选择不同values文件夹下的dimens

3. 布局适配:根据手机的像素密度,选择不同layout文件夹下的布局

4. 代码适配:通过代码动态指定控件大小,达到适配效果

5. 权重适配:layout_weight:巧妙利用权重进行适配(将屏幕宽高 等分)

 

 

像素密度: 单位尺寸内的像素大小  dpi   dipdp

 

红米 note  1280x720  5.5

 

像素密度:对角线的像素的多少/尺寸

 

1638400 + 518400 =  1468 (对角线的像素的多少)

 

1468/5.5 = 267 dpi 

 

 

xxdpi   与  像素密度dpi  关系

ldpi  ~120dpi

mdpi  ~16odpi

 drawable/values(默认资源)

hdpi  ~240dpi

xhdpi  ~320dpi

xxhdpi  ~480dpi

xxxhdpi  ~640dpi

 

 

1. 图片适配: 根据手机的像素密度,选择不同drawable文件夹下的图片

 

默认情况下,会根据手机像素密度,加载对应drawable文件夹下的图片  (手机mdpi--drawable-mdpi

 

在布局中使用同名文件图片,在不同的drawable下放入不同大小的a.jpg  (a:不同大小的相同的图片)

 

如果对应drawable文件夹下没有当前图片,会向上查找:mdpi没有,hdpi——xhdpi——————

 

如果向上找,找不到对应的图片,才会向下查找。

 

drawable  是 大于mdpi  小于hdpi  

 

在工作中,美工会给多套图片,放入对应的drawable文件夹下即可

 

 

2. dimens 尺寸 适配:根据手机的像素密度,选择不同values文件夹下的dimens

 

ldpi  1dp = 0.75px

mdpi  1dp = 1px

hdpi  1dp = 1.5px

xhdpi 1dp = 2.0px

 

hdpi   宽度 480px  , 一半 240px

 

160dp  * 1.5  = 240 px 

 

xhdpi   宽度 800px  一半  400 px = 200dp

 

160dp *2 = 320px  

 

使用dimens规则:

 

将布局中的dp抽取出来,放到dimens里即可。布局中通过@dimen/xxx调用

 

dp有一定的适配能力

 

在工作中,还是使用dp,如果测试时发现不视频的机型,针对某种机型,做dimens适配。

3. 布局适配:根据手机的像素密度,选择不同layout文件夹下的布局

 

谷歌推荐做法,当时公司不采用。layout布局编写非常麻烦,工作量大

 

layout-xhdpi  241-320dpi

 

layout-1280x720  :  某一个精确分辨率的手机适配

values-sw600dp  : 手机最小边框长度,如果大于等于600dp ,就会选择此文件夹下的资源

 

4. 代码适配:通过代码动态指定控件大小,达到适配效果 (不要出现具体的px值)

 

1. 根据手机屏幕来设置控件大小

 

 TextView textView = (TextView) findViewById(R.id.textview);

        //获取屏幕宽度

        int screenWidth = getResources().getDisplayMetrics().widthPixels;//屏幕宽度:px

        int textViewWidth = (int) (screenWidth*0.8);

        LayoutParams params = new LayoutParams(textViewWidth , LayoutParams.WRAP_CONTENT);

        textView.setLayoutParams(params);

 

2. dp-px (工具)

 

   /** 

                   * 若代码中出现了具体的数字,其单位是px 需要根据手机的分辨率从 dip                * 的单位 转成为 px(像素

    */  

    public static int dip2px(Context context, float dpValue) {  

        final float scale = context.getResources().getDisplayMetrics().density; //屏幕的密度dpi 

        return (int) (dpValue * scale + 0.5f);  

    }  

5. 权重适配:layout_weight:巧妙利用权重进行适配(将屏幕宽高 等分)

 

1. 屏幕平分

2. 将剩余控件分配给其中一个控件

你可能感兴趣的:(android随笔19——手机屏幕适配)