android 屏幕适配1 ——dimens.xml的适配

1.如果是才开始做项目,已经有设计图:720*1280

1).默认values文件夹:1dp=1px

values/dimens_x.xml:

 name: x1~x720   value:1px~720px           

<dimen name="x1">1.0px</dimen>

values/dimens_y.xml

 name: y1~y1280   value:1px~1280px

<dimen name="y1">1.0px</dimen>

2).720*1280像素对应的values-w720dp文件: 1dp=2px

values-w720dp/dimens_x.xml:

 name: x1~x720   value:2px~1440px        

<dimen name="x1">2.0px</dimen>

values-w720dp/dimens_y.xml 

 name: y1~y1280   value:2px~2560px

<dimen name="y1">2.0px</dimen>

2).1080*1920像素对应的values-w1080dp文件: 【以720*1280位基准数作倍数换算

values-w1080dp/dimens_x.xml:

 name: x1~x720   value:3px~1080px     Width:1080  baseW:720 

<dimen name="x1">3.0px</dimen> 倍数换算:倍数=Width/baseW=1080/720=1.5  value=1.5*2px=3.0px

values-w1080dp/dimens_y.xml:

 name: y1~y1280   value:3px~3840px        Height:1920   baseH:1280

<dimen name="y1">3px</dimen> 倍数换算:倍数=Height/baseH=1920/1280=1.5  value=1.5*2px=3.0px

 备注:

1.倍数即屏幕像素密度:例子中用的是常用的手机像素密度,但市面上手机像素密度参差不齐,跟你测试的实际手机像素密度可能不一样,但一般用常用的像素密度来换算

2.若以dp为单位

1).values下的文件,如下:

values/dimens_x.xml 

name: x1~x720   value:1.0dp~720.0dp  

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

......

<dimen name="x720">720.0dp</dimen>

values/dimens_y.xml 

name:y1~y1280  value:1dp~1280.0dp

<dimen name="y1">1dp</dimen>

......

<dimen name="y1280">1280.0dp</dimen>

2).values-w720dp下,如下:

values-w720dp/dimens_x.xml 

name: x1~x720   value:0.5dp~360.0dp  

<dimen name="x1">0.5dp</dimen>

......

<dimen name="x720">360.0dp</dimen>

values-720dp/dimens_y.xml 

name:y1~y1280  value:0.5dp~640.0dp

<dimen name="y1">0.5dp</dimen>

......

<dimen name="y1280">640.0dp</dimen>

2.项目完成之后,则将values下面的dimens.xml 文件

按照不同分辩率的手机生成对应倍数的不同像素的dimens.xml文件

 eg:以720*1280为例子

values/dimens.xml :1dp=1px

<dimen name="x1">1dp</dimen>

values-w720dp/dimens.xml : 【720*1280】 

<dimen name="x1">0.5dp</dimen> 倍数换算:  1dp=2px  720px=360dp    倍数=360/720=0.5

values-w1080dp/dimens.xml : 【1080*1920

<dimen name="x1">0.75dp</dimen> 倍数换算【以720作基准】:1080/720*0.5=0.75dp 

 

附:自动生成dimens.xml的代码:

1.项目才开始,生成竖屏的代码

package com.charlie.volley.utils;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintWriter;

/**
 * 屏幕适配,自动生成dimens.xml
 * @author Charlie
 *
 */
public class GenerateValueFiles {

    private int baseW;
    private int baseH;

    private String dirStr = "./res";

    private final static String WTemplate = "<dimen name=\"x{0}\">{1}dp</dimen>\n";
    private final static String HTemplate = "<dimen name=\"y{0}\">{1}dp</dimen>\n";
    /**
     * {0}-HEIGHT
     */
    private final static String VALUE_TEMPLATE = "values-{0}x{1}";
    private final static String VALUE_TEMPLATE1 = "values";

    private static final String SUPPORT_DIMESION = "720,1280;1536,2048;1080,1920";
    /**
     * 单位为px:倍数与屏幕分辨率有关,2.0f对应屏幕像素为:720*1280,生成的文件对应放在values-w720dp下面
     * 单位为dp:multiple=0.5f,对应屏幕像素为:720*1280,生成的文件对应放在values-w720dp下面
     */
    private final static float multiple=0.5f; 

    private String supportStr = SUPPORT_DIMESION;

    public GenerateValueFiles(int baseX, int baseY, String supportStr) {
        this.baseW = baseX;
        this.baseH = baseY;

        if (!this.supportStr.contains(baseX + "," + baseY)) {
            this.supportStr += baseX + "," + baseY + ";";
        }

        this.supportStr += validateInput(supportStr);

        System.out.println(supportStr);

        File dir = new File(dirStr);
        if (!dir.exists()) {
            dir.mkdir();

        }
        System.out.println(dir.getAbsoluteFile());

    }

    /**
     * @param supportStr
     *            w,h_...w,h;
     * @return
     */
    private String validateInput(String supportStr) {
        StringBuffer sb = new StringBuffer();
        String[] vals = supportStr.split("_");
        int w = -1;
        int h = -1;
        String[] wh;
        for (String val : vals) {
            try {
                if (val == null || val.trim().length() == 0)
                    continue;

                wh = val.split(",");
                w = Integer.parseInt(wh[0]);
                h = Integer.parseInt(wh[1]);
            } catch (Exception e) {
                System.out.println("skip invalidate params : w,h = " + val);
                continue;
            }
            sb.append(w + "," + h + ";");
        }

        return sb.toString();
    }

    public void generate() {
        String[] vals = supportStr.split(";");
        for (String val : vals) {
            String[] wh = val.split(",");
           if(Integer.parseInt(wh[0])==baseW){
               float multiple=1.0f;
               generateBaseXmlFile(Integer.parseInt(wh[0]), Integer.parseInt(wh[1]),multiple);
           }
            generateXmlFile(Integer.parseInt(wh[0]), Integer.parseInt(wh[1]));
        }
    }

private void generateBaseXmlFile(int w, int h,float multiple) {
        
        StringBuffer sbForWidth = new StringBuffer();
        sbForWidth.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
        sbForWidth.append("<resources>\n");
        float cellw = w * multiple / baseW;

        System.out.println("width : " + w + "," + baseW + "," + cellw);
        for (int i = 1; i <= baseW; i++) {
            sbForWidth.append("\t"+WTemplate.replace("{0}", i + "").replace("{1}",
                    change(cellw * i) + ""));
        }
//        sbForWidth.append("\t"+WTemplate.replace("{0}", baseW + "").replace("{1}",
//                w + ""));
        sbForWidth.append("</resources>");

        StringBuffer sbForHeight = new StringBuffer();
        sbForHeight.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
        sbForHeight.append("<resources>\n");
        float cellh = h *multiple/ baseH;
        System.out.println("height : "+ h + "," + baseH + "," + cellh);
        for (int i = 1; i <= baseH; i++) {
            sbForHeight.append("\t"+HTemplate.replace("{0}", i + "").replace("{1}",
                    change(cellh * i) + ""));
        }
//        sbForHeight.append("\t"+HTemplate.replace("{0}", baseH + "").replace("{1}",
//                h + ""));
        sbForHeight.append("</resources>");

        File fileDir = new File(dirStr + File.separator
                + VALUE_TEMPLATE1);
        fileDir.mkdir();
        File layxFile = new File(fileDir.getAbsolutePath(), "ch_dimens_x.xml");
        File layyFile = new File(fileDir.getAbsolutePath(), "ch_dimens_y.xml");
        System.out.println(fileDir.toString());
        try {
            PrintWriter pw = new PrintWriter(new FileOutputStream(layxFile));
            pw.print(sbForWidth.toString());
            pw.close();
            pw = new PrintWriter(new FileOutputStream(layyFile));
            pw.print(sbForHeight.toString());
            pw.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
    
    private void generateXmlFile(int w, int h) {
        
        StringBuffer sbForWidth = new StringBuffer();
        sbForWidth.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
        sbForWidth.append("<resources>\n");
        float cellw = w * multiple / baseW;

        System.out.println("width : " + w + "," + baseW + "," + cellw);
        for (int i = 1; i <= baseW; i++) {
            sbForWidth.append("\t"+WTemplate.replace("{0}", i + "").replace("{1}",
                    change(cellw * i) + ""));
        }
//        sbForWidth.append("\t"+WTemplate.replace("{0}", baseW + "").replace("{1}",
//                w + ""));
        sbForWidth.append("</resources>");

        StringBuffer sbForHeight = new StringBuffer();
        sbForHeight.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
        sbForHeight.append("<resources>\n");
        float cellh = h *multiple/ baseH;
        System.out.println("height : "+ h + "," + baseH + "," + cellh);
        for (int i = 1; i <= baseH; i++) {
            sbForHeight.append("\t"+HTemplate.replace("{0}", i + "").replace("{1}",
                    change(cellh * i) + ""));
        }
//        sbForHeight.append("\t"+HTemplate.replace("{0}", baseH + "").replace("{1}",
//                h + ""));
        sbForHeight.append("</resources>");

        File fileDir = new File(dirStr + File.separator
                + VALUE_TEMPLATE.replace("{0}", h + "")//
                        .replace("{1}", w + ""));
        fileDir.mkdir();
        File layxFile = new File(fileDir.getAbsolutePath(), "ch_dimens_x.xml");
        File layyFile = new File(fileDir.getAbsolutePath(), "ch_dimens_y.xml");
        try {
            PrintWriter pw = new PrintWriter(new FileOutputStream(layxFile));
            pw.print(sbForWidth.toString());
            pw.close();
            pw = new PrintWriter(new FileOutputStream(layyFile));
            pw.print(sbForHeight.toString());
           
            
            pw.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static float change(float a) {
        int temp = (int) (a * 100);
        return temp / 100f;
    }

    public static void main(String[] args) {
        int baseW = 720;
        int baseH = 1280;
        String addition = "";
        try {
            if (args.length >= 3) {
                baseW = Integer.parseInt(args[0]);
                baseH = Integer.parseInt(args[1]);
                addition = args[2];
            } else if (args.length >= 2) {
                baseW = Integer.parseInt(args[0]);
                baseH = Integer.parseInt(args[1]);
            } else if (args.length >= 1) {
                addition = args[0];
            }
        } catch (NumberFormatException e) {

            System.err
                    .println("right input params : java -jar xxx.jar width height w,h_w,h_..._w,h;");
            e.printStackTrace();
            System.exit(-1);
        }

        new GenerateValueFiles(baseW, baseH, addition).generate();
    }

}

 2.项目才开始,生成横屏的代码

package com.charlie.volley.utils;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintWriter;

/**
 * 屏幕适配,自动生成dimens.xml
 * @author Charlie
 *
 */
public class GenerateValueFiles_land {

    private int baseW;
    private int baseH;

    private String dirStr = "./res";

    private final static String WTemplate = "<dimen name=\"x{0}\">{1}dp</dimen>\n";
    private final static String HTemplate = "<dimen name=\"y{0}\">{1}dp</dimen>\n";
    /**
     * {0}-HEIGHT
     */
    private final static String VALUE_TEMPLATE = "values-{0}x{1}";
    private final static String VALUE_TEMPLATE1 = "values";

    private static final String SUPPORT_DIMESION = "1280,720;2048,1536;";
    /**
     * 单位为px:倍数与屏幕分辨率有关,2.0f对应屏幕像素为:720*1280,生成的文件对应放在values-w720dp下面
     * 单位为dp:multiple=0.5f,对应屏幕像素为:720*1280,生成的文件对应放在values-w720dp下面
     */
    private final static float multiple=0.5f; 

    private String supportStr = SUPPORT_DIMESION;

    public GenerateValueFiles_land(int baseX, int baseY, String supportStr) {
        this.baseW = baseX;
        this.baseH = baseY;

        if (!this.supportStr.contains(baseX + "," + baseY)) {
            this.supportStr += baseX + "," + baseY + ";";
        }

        this.supportStr += validateInput(supportStr);

        System.out.println(supportStr);

        File dir = new File(dirStr);
        if (!dir.exists()) {
            dir.mkdir();

        }
        System.out.println(dir.getAbsoluteFile());

    }

    /**
     * @param supportStr
     *            w,h_...w,h;
     * @return
     */
    private String validateInput(String supportStr) {
        StringBuffer sb = new StringBuffer();
        String[] vals = supportStr.split("_");
        int w = -1;
        int h = -1;
        String[] wh;
        for (String val : vals) {
            try {
                if (val == null || val.trim().length() == 0)
                    continue;

                wh = val.split(",");
                w = Integer.parseInt(wh[0]);
                h = Integer.parseInt(wh[1]);
            } catch (Exception e) {
                System.out.println("skip invalidate params : w,h = " + val);
                continue;
            }
            sb.append(w + "," + h + ";");
        }

        return sb.toString();
    }

    public void generate() {
        String[] vals = supportStr.split(";");
        for (String val : vals) {
            String[] wh = val.split(",");
           if(Integer.parseInt(wh[0])==baseW){
               float multiple=1.0f;
               generateBaseXmlFile(Integer.parseInt(wh[0]), Integer.parseInt(wh[1]),multiple);
           }
            generateXmlFile(Integer.parseInt(wh[0]), Integer.parseInt(wh[1]));
        }
    }

private void generateBaseXmlFile(int w, int h,float multiple) {
        
        StringBuffer sbForWidth = new StringBuffer();
        sbForWidth.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
        sbForWidth.append("<resources>\n");
        float cellw = w * multiple / baseW;

        System.out.println("width : " + w + "," + baseW + "," + cellw);
        for (int i = 1; i <= baseW; i++) {
            sbForWidth.append("\t"+WTemplate.replace("{0}", i + "").replace("{1}",
                    change(cellw * i) + ""));
        }
//        sbForWidth.append("\t"+WTemplate.replace("{0}", baseW + "").replace("{1}",
//                w + ""));
        sbForWidth.append("</resources>");

        StringBuffer sbForHeight = new StringBuffer();
        sbForHeight.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
        sbForHeight.append("<resources>\n");
        float cellh = h *multiple/ baseH;
        System.out.println("height : "+ h + "," + baseH + "," + cellh);
        for (int i = 1; i <= baseH; i++) {
            sbForHeight.append("\t"+HTemplate.replace("{0}", i + "").replace("{1}",
                    change(cellh * i) + ""));
        }
//        sbForHeight.append("\t"+HTemplate.replace("{0}", baseH + "").replace("{1}",
//                h + ""));
        sbForHeight.append("</resources>");

        File fileDir = new File(dirStr + File.separator
                + VALUE_TEMPLATE1+"-land");
        fileDir.mkdir();
        File layxFile = new File(fileDir.getAbsolutePath(), "ch_dimens_x.xml");
        File layyFile = new File(fileDir.getAbsolutePath(), "ch_dimens_y.xml");
        System.out.println(fileDir.toString());
        try {
            PrintWriter pw = new PrintWriter(new FileOutputStream(layxFile));
            pw.print(sbForWidth.toString());
            pw.close();
            pw = new PrintWriter(new FileOutputStream(layyFile));
            pw.print(sbForHeight.toString());
            pw.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
    
    private void generateXmlFile(int w, int h) {
        
        StringBuffer sbForWidth = new StringBuffer();
        sbForWidth.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
        sbForWidth.append("<resources>\n");
        float cellw = w * multiple / baseW;

        System.out.println("width : " + w + "," + baseW + "," + cellw);
        for (int i = 1; i <= baseW; i++) {
            sbForWidth.append("\t"+WTemplate.replace("{0}", i + "").replace("{1}",
                    change(cellw * i) + ""));
        }
//        sbForWidth.append("\t"+WTemplate.replace("{0}", baseW + "").replace("{1}",
//                w + ""));
        sbForWidth.append("</resources>");

        StringBuffer sbForHeight = new StringBuffer();
        sbForHeight.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
        sbForHeight.append("<resources>\n");
        float cellh = h *multiple/ baseH;
        System.out.println("height : "+ h + "," + baseH + "," + cellh);
        for (int i = 1; i <= baseH; i++) {
            sbForHeight.append("\t"+HTemplate.replace("{0}", i + "").replace("{1}",
                    change(cellh * i) + ""));
        }
//        sbForHeight.append("\t"+HTemplate.replace("{0}", baseH + "").replace("{1}",
//                h + ""));
        sbForHeight.append("</resources>");

        File fileDir = new File(dirStr + File.separator
                + VALUE_TEMPLATE.replace("{0}", w + "")//
                        .replace("{1}", h + "")+"-land");
        fileDir.mkdir();
        File layxFile = new File(fileDir.getAbsolutePath(), "ch_dimens_x.xml");
        File layyFile = new File(fileDir.getAbsolutePath(), "ch_dimens_y.xml");
        try {
            PrintWriter pw = new PrintWriter(new FileOutputStream(layxFile));
            pw.print(sbForWidth.toString());
            pw.close();
            pw = new PrintWriter(new FileOutputStream(layyFile));
            pw.print(sbForHeight.toString());
           
            
            pw.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static float change(float a) {
        int temp = (int) (a * 100);
        return temp / 100f;
    }

    public static void main(String[] args) {
        int baseW = 1280;
        int baseH = 720;
        String addition = "";
        try {
            if (args.length >= 3) {
                baseW = Integer.parseInt(args[0]);
                baseH = Integer.parseInt(args[1]);
                addition = args[2];
            } else if (args.length >= 2) {
                baseW = Integer.parseInt(args[0]);
                baseH = Integer.parseInt(args[1]);
            } else if (args.length >= 1) {
                addition = args[0];
            }
        } catch (NumberFormatException e) {

            System.err
                    .println("right input params : java -jar xxx.jar width height w,h_w,h_..._w,h;");
            e.printStackTrace();
            System.exit(-1);
        }

        new GenerateValueFiles_land(baseW, baseH, addition).generate();
    }

}

 3.项目已完成,作屏幕适配,根据已有的dimens.xml生成对应不同分辨率文件夹下的dimens.xml文件

package com.charlie.volley.utils;

import java.io.BufferedReader;  
import java.io.BufferedWriter;  
import java.io.File;  
import java.io.FileOutputStream;
import java.io.FileReader;  
import java.io.FileWriter;  
import java.io.IOException;  
import java.io.PrintWriter;  
  
/** 
 * eclipse下使用
 * 
 * 屏幕适配,自动生成dimens.xml
 * @author Charlie
 *
 *
 * 快速生成适配工具类 
 * 工具类代码,直接运行即可,(如果提示 Invalid layout of preloaded class 错误 项目设置如下即可

Project->Properties->Run/Debug Settings;
Select your Class(DimenTool.java) and click "Edit";
Open the tab "Classpath" and remove Android Lib from "Bootstrap Entries";
Apply everything and Run the class again.
 */  
public class DimensUtils {  
  
    public static void gen() {  
        //以此文件夹下的dimens.xml文件内容为初始值参照  
        File file = new File("./res/values/dimens.xml");  
//        File file = new File("./app/src/main/res/values/dimens.xml");  android studio
  
        BufferedReader reader = null;  
        StringBuilder sw240 = new StringBuilder();  
        StringBuilder sw480 = new StringBuilder();  
        StringBuilder sw600 = new StringBuilder();  
  
        StringBuilder sw720 = new StringBuilder();  
  
        StringBuilder sw800 = new StringBuilder();  
  
        StringBuilder w820 = new StringBuilder();  
  
        try {  
  
            System.out.println("生成不同分辨率:");  
  
            reader = new BufferedReader(new FileReader(file));  
  
            String tempString;  
  
            int line = 1;  
  
            // 一次读入一行,直到读入null为文件结束  
  
            while ((tempString = reader.readLine()) != null) {  
  
  
                if (tempString.contains("</dimen>")) {  
  
                    //tempString = tempString.replaceAll(" ", "");  
  
                    String start = tempString.substring(0, tempString.indexOf(">") + 1);  
  
                    String end = tempString.substring(tempString.lastIndexOf("<") - 2);  
                    //截取<dimen></dimen>标签内的内容,从>右括号开始,到左括号减2,取得配置的数字  
                    Double num = Double.parseDouble  
                            (tempString.substring(tempString.indexOf(">") + 1,   
                                    tempString.indexOf("</dimen>") - 2));  
  
                    //根据不同的尺寸,计算新的值,拼接新的字符串,并且结尾处换行。  
                    sw240.append(start).append( num * 0.75).append(end).append("\r\n");  
  
                    sw480.append(start).append(num * 1.5).append(end).append("\r\n");  
  
                    sw600.append(start).append(num * 1.87).append(end).append("\r\n");  
  
                    sw720.append(start).append(num * 2.25).append(end).append("\r\n");  
  
                    sw800.append(start).append(num * 2.5).append(end).append("\r\n");  
  
                    w820.append(start).append(num * 2.56).append(end).append("\r\n");  
  
  
  
                } else {  
                    sw240.append(tempString).append("");  
  
                    sw480.append(tempString).append("");  
  
                    sw600.append(tempString).append("");  
  
                    sw720.append(tempString).append("");  
  
                    sw800.append(tempString).append("");  
  
                    w820.append(tempString).append("");  
  
                }  
  
                line++;  
  
            }  
  
            reader.close();  
            System.out.println("<!--  sw240 -->");  
  
            System.out.println(sw240);  
  
            System.out.println("<!--  sw480 -->");  
  
            System.out.println(sw480);  
  
            System.out.println("<!--  sw600 -->");  
  
            System.out.println(sw600);  
  
            System.out.println("<!--  sw720 -->");  
  
            System.out.println(sw720);  
  
            System.out.println("<!--  sw800 -->");  
  
            System.out.println(sw800);  
  
            String sw240file = "./res/values-sw240dp/dimens.xml";  
  
            String sw480file = "./res/values-sw480dp/dimens.xml";  
  
            String sw600file = "./res/values-sw600dp/dimens.xml";  
  
            String sw720file = "./res/values-sw720dp/dimens.xml";  
  
            String sw800file = "./res/values-sw800dp/dimens.xml";  
  
            String w820file = "./res/values-w820dp/dimens.xml";  
            //将新的内容,写入到指定的文件中去  
            writeFile(sw240file, sw240.toString());  
  
            writeFile(sw480file, sw480.toString());  
  
            writeFile(sw600file, sw600.toString());  
  
            writeFile(sw720file, sw720.toString());  
  
            writeFile(sw800file, sw800.toString());  
  
            writeFile(w820file, w820.toString());  
  
        } catch (IOException e) {  
  
            e.printStackTrace();  
  
        } finally {  
  
            if (reader != null) {  
  
                try {  
  
                    reader.close();  
  
                } catch (IOException e1) {  
  
                    e1.printStackTrace();  
  
                }  
  
            }  
  
        }  
  
    }  
  
  
    /** 
     * 写入方法 
     * 
     */  
  
    public static void writeFile(String file, String text) {  
  
        PrintWriter out = null;  
        
        try {  
  
//            out = new PrintWriter(new BufferedWriter(new FileWriter(file)));  
//  
//            out.println(text);  
             File fileDir = new File((String) file.subSequence(0, file.length()-11));
             fileDir.mkdir();
            out= new PrintWriter(new FileOutputStream(new File(file)));
            out.println(text);  
            out.close();
            
        } catch (IOException e) {  
  
            e.printStackTrace();  
  
        }  
  
  
  
        out.close();  
  
    }  
    public static void main(String[] args) {  
  
        gen();  
  
    }  
  
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: dimens.xml是一个XML资源文件,用于在Android应用程序中设置尺寸和间距等的数字值。在开发Android应用程序时,我们需要在布局文件或代码中指定宽度、高度、字体大小等具体的数值。然而,这些数值通常需要在不同的屏幕大小和分辨率的设备上适配dimens.xml的作用就在于,我们可以在这个文件中定义一系列的尺寸值,然后在布局文件或代码中引用这些尺寸值,使得我们的应用程序可以适配不同的屏幕大小和分辨率的设备。 一般来说,我们在res/values/文件夹下创建dimens.xml文件,这个文件中定义的尺寸值会被认为是默认值。如果我们需要适配不同的屏幕大小和分辨率的设备,只需要在res/values-swXXXdp/或res/values-wXXXdp/等针对不同屏幕大小和分辨率的文件夹下创建dimens.xml文件,并重新定义一些尺寸值即可,系统会根据当前设备的屏幕大小和分辨率自动选择正确的dimens.xml文件。在布局文件或代码中引用dimens.xml中定义的尺寸值,只需要使用@dimen/尺寸名称即可。使用dimens.xml可以大大提高我们的开发效率,避免了手动计算不同屏幕大小和分辨率的数值的麻烦。 ### 回答2: dimens.xmlAndroid项目中的一个资源文件,用于定义尺寸值,如宽度、高度、边距等。在这个文件中,我们可以根据不同的屏幕密度和设备尺寸定义不同的尺寸值,以确保应用在不同设备上的显示效果一致。 在开发过程中,我们经常会遇到需要根据屏幕尺寸或者设备密度调整UI元素大小的情况。使用dimens.xml可以避免在代码中硬编码尺寸值,降低了修改难度和出错几率。实际上,使用dimens.xml可以使得应用的适应性更好,因为不同设备的大小和密度不同,使用这种方式来定义尺寸值可以使得应用更好地适应各种尺寸的设备。 在dimens.xml文件中,我们可以定义一个或多个尺寸值,例如: <dimen name="button_width">100dp</dimen> 这是一种常见的定义方式,其中"button_width"是我们定义的一个名字,"100dp"是具体的尺寸值。在代码中使用时,可以通过R.dimen.button_width来引用这个值。通过定义不同的名字和尺寸值,我们可以在应用中使用不同的尺寸值,以适应不同的屏幕尺寸和密度。 总之,dimens.xml是一种非常实用的资源文件,可以帮助我们更好地管理尺寸值,提高应用的适应性和可维护性。 ### 回答3: dimens.xml是一种Android平台上的资源文件,用于存储不同尺寸的尺寸值。它可以帮助开发者轻松地处理不同屏幕分辨率和设备密度大小的问题。在应用程序中,使用dimens.xml可以实现屏幕适配和响应式布局。当应用在不同大小和分辨率的设备上运行时,系统将自动从dimens.xml中检索相应的值。这个文件包含了指定的尺寸值和单位。例如,如果要设置一个TextView的文本大小,在代码中使用dimens.xml中定义的值来设置文本大小。在不同地区或语言环境下,dimens.xml也可以用于存储不同文本样式和尺寸值。总之,dimens.xml是确保应用程序在设备屏幕上正确展示的重要资源之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值