美文网首页
android 屏幕适配

android 屏幕适配

作者: Code819 | 来源:发表于2021-01-17 11:28 被阅读0次

    @[TOC](文章目录)

    <hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">

    # 前言

    <font color=#999AAA >使用工具Android studio,利用values文件下dimens.xml界面适配安卓屏幕</font>

    <hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">

    <font color=#999AAA >提示:以下是本篇文章正文内容,下面案例可供参考

    # 一、概念

    1.屏幕分辨率单位是px,例如Android手机常见的分辨率:320x480px、480x800px、720x1280px、1080x1920px。

    2.手机屏幕的密度:每英寸的像素点数,单位是dpi。

    | 密度类型 |代表的分辨率(px)| 屏幕像素密度(dpi) | 1dp转换为px |

    |:--------|:--------|:--------|:--------|

    | 低密度(ldpi) |240x320|120|0.75|

    | 中密度(mdpi) |320x480|160|1|

    | 高密度(hdpi)|480x800|240| 1.5|

    | 超高密度(xhdpi)|720x1280|320|2|

    | 超超高密度(xxhdpi) |1080x1920|480|3|

    3.由于android的机型屏幕大小品类太多了,有一些是不标准的,这时我们就需要单独去获取屏幕的分辨率和密度了。

    # 二、获取屏幕的分辨率和密度

    ```java

    DisplayMetrics displayMetrics = getResources().getDisplayMetrics();

        float density = displayMetrics.density;

        int densityDpi = displayMetrics.densityDpi;

        int width = displayMetrics.widthPixels;

        int height = displayMetrics.heightPixels;

        Log.e("123","密度:"+density+"---"+densityDpi);

        Log.e("123","屏幕分辨率:"+width+"x"+height);

        Log.e("123","安卓系统:"+android.os.Build.VERSION.RELEASE);

        Log.e("123","手表型号:"+android.os.Build.PRODUCT);

    ```

    # 三、SmallestWidth适配

    **smallestWidth适配,或者叫sw限定符适配。指的是Android会识别屏幕可用高度和宽度的最小尺寸的dp值(其实就是手机的宽度值),然后根据识别到的结果去资源文件中寻找对应限定符的文件夹下的资源文件。**

    **sw计算公式:sw = 屏幕宽度 / (dpi/160)  注:160是默认的**

    **例如:屏幕宽度为1080px、480dpi 的sw = 1080/(480/160)**

    # 四、生成 dimens 文件

    1、 首先在 res 目录下新建各种尺寸的 values 文件 。文件名为:values-sw(你要适配屏幕的sw值)dp。

    例如:

    ![code23](https://img-blog.csdnimg.cn/2020111311092374.PNG#pic_center)

    注意:values文件下也生成 dimens文件

    **生成dimens值工具类**

    1、先生成标准的值。//value = (i + 1) * 1;

    2、再用生成其他的值。 //value = (i + 1) * 需要生成的sw值/标准的sw值;

    例如:value = (i + 1) * 160 / 320;

    ```java

    public static void genDimen() {

            StringBuilder stringBuilder = new StringBuilder();

            try {

                double value;

                for (int i = 0; i < 500; i++) {

                    //value = (i + 1) * 1; //这里控制对应转换的值,如果是标准尺寸就一对一转换

                    //value = (i + 1) * 需要生成的sw值/标准的sw值; //这里控制对应转换的值

    value = (i + 1) * 1

                    //value = (i + 1) * 160 / 320;

                    value = Math.round(value * 100) / 100;

    //dp可改成sp

                    stringBuilder.append("<dimen name=\"size_" + (i + 1) + "\">" + value + "dp</dimen>\r\n");

                }

                if (stringBuilder.length() > 4000) {

                    for (int i = 0; i < stringBuilder.length(); i += 4000) {

                        if (i + 4000 < stringBuilder.length())

                            Log.e("123", stringBuilder.substring(i, i + 4000));

                        else

                            Log.e("123", stringBuilder.substring(i, stringBuilder.length()));

                    }

                } else {

                    Log.e("123", stringBuilder.toString());

                }

            } catch (Exception e) {

                e.printStackTrace();

            } finally {

            }

        }

    ```

    示例:(我这是以sw320为适配的标准的,你们可改自己的标准)

    1、sw320的样例

    ```java

    <resources>

        <dimen name="dimen_1">1.0dp</dimen>

        <dimen name="dimen_2">2.0dp</dimen>

        <dimen name="dimen_3">3.0dp</dimen>

        <dimen name="dimen_4">4.0dp</dimen>

        <dimen name="dimen_5">5.0dp</dimen>

        <dimen name="dimen_6">6.0dp</dimen>

        <dimen name="dimen_7">7.0dp</dimen>

        <dimen name="dimen_8">8.0dp</dimen>

        <dimen name="dimen_9">9.0dp</dimen>

        <dimen name="dimen_10">10.0dp</dimen>

        <dimen name="size_1">1.0sp</dimen>

        <dimen name="size_2">2.0sp</dimen>

        <dimen name="size_3">3.0sp</dimen>

        <dimen name="size_4">4.0sp</dimen>

        <dimen name="size_5">5.0sp</dimen>

        <dimen name="size_6">6.0sp</dimen>

        <dimen name="size_7">7.0sp</dimen>

        <dimen name="size_8">8.0sp</dimen>

        <dimen name="size_9">9.0sp</dimen>

        <dimen name="size_10">10.0sp</dimen>

    </resources>

    ```

    2、sw160的样例

    ```java

    <resources>

        <dimen name="dimen_1">0.0dp</dimen>

        <dimen name="dimen_2">1.0dp</dimen>

        <dimen name="dimen_3">1.0dp</dimen>

        <dimen name="dimen_4">2.0dp</dimen>

        <dimen name="dimen_5">2.0dp</dimen>

        <dimen name="dimen_6">3.0dp</dimen>

        <dimen name="dimen_7">3.0dp</dimen>

        <dimen name="dimen_8">4.0dp</dimen>

        <dimen name="dimen_9">4.0dp</dimen>

        <dimen name="dimen_10">5.0dp</dimen>

    <dimen name="size_1">0.0sp</dimen>

        <dimen name="size_2">1.0sp</dimen>

        <dimen name="size_3">1.0sp</dimen>

        <dimen name="size_4">2.0sp</dimen>

        <dimen name="size_5">2.0sp</dimen>

        <dimen name="size_6">3.0sp</dimen>

        <dimen name="size_7">3.0sp</dimen>

        <dimen name="size_8">4.0sp</dimen>

        <dimen name="size_9">4.0sp</dimen>

        <dimen name="size_10">5.0sp</dimen>

    </resources>

    ```

    3、xml界面控件使用样例

    ```java

    <TextView

            android:layout_width="@dimen/dimen_30"

            android:layout_height="@dimen/dimen_30"

            android:textSize="@dimen/size_20"

            android:layout_margin="@dimen/dimen_10"

            android:padding="@dimen/dimen_10">

    ```

    <hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">

    # 总结

    <font color=#999999 >提示:这里对文章进行总结:

    如果你的app需要适配dpi较低的屏幕,最好以最小dpi的sw为适配的标准。

    相关文章

      网友评论

          本文标题:android 屏幕适配

          本文链接:https://www.haomeiwen.com/subject/wyrooktx.html