Dimen 自动生成

package com;

import android.util.Log;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;

/**
 * 快速生成适配工具类
 */
public class DimenTool {

    private static List<String> targetFileList;
    private static String startFlag, stopFlag;

    public static void gen() {
        //以此文件夹下的dimens.xml文件内容为初始值参照
        File fromFile = new File("./host/res/values-sw200dp/dimens.xml");
        startFlag = "<!-- add for adjust pm start";
        stopFlag = "<!-- add for adjust pm end -->";
        double rotate = 0.2;
        targetFileList = new ArrayList<>();

        targetFileList.add("./host/res/values-sw250dp/dimens.xml");
        targetFileList.add("./host/res/values-sw300dp/dimens.xml");
        targetFileList.add("./host/res/values-sw350dp/dimens.xml");
        targetFileList.add("./host/res/values-sw400dp/dimens.xml");
        targetFileList.add("./host/res/values-sw450dp/dimens.xml");
        targetFileList.add("./host/res/values-sw500dp/dimens.xml");
        targetFileList.add("./host/res/values-sw530dp/dimens.xml");
        targetFileList.add("./host/res/values-sw600dp/dimens.xml");
        targetFileList.add("./host/res/values-sw620dp/dimens.xml");
        targetFileList.add("./host/res/values-sw700dp/dimens.xml");
        targetFileList.add("./host/res/values-sw750dp/dimens.xml");
        targetFileList.add("./host/res/values-sw800dp/dimens.xml");
        targetFileList.add("./host/res/values-sw850dp/dimens.xml");
        targetFileList.add("./host/res/values-sw900dp/dimens.xml");
        targetFileList.add("./host/res/values-sw941dp/dimens.xml");


        BufferedReader reader = null;
        StringBuilder appendString = null;

        for (int i = 0; i < targetFileList.size(); i++) {
            String targetFile = targetFileList.get(i);
            appendString = new StringBuilder();
            try {
                reader = new BufferedReader(new FileReader(new File(targetFile)));
                String tempString;

                // 一次读入一行,直到读入null为文件结束
                while ((tempString = reader.readLine()) != null) {
                    //起始行数过滤
                    if (tempString.contains(startFlag) || tempString.contains("</resources>")) {
                        break;
                    }
                    appendString.append(tempString).append("\r\n");
                }
                reader.close();
                System.out.println("<!-- read target finish  -->");
                System.out.println(appendString);

            } catch (Exception e) {
                e.printStackTrace();
            }


            try {
                System.out.println("生成不同分辨率:");
                reader = new BufferedReader(new FileReader(fromFile));

                String tempString;
                boolean fromThisLine = false;
                // 一次读入一行,直到读入null为文件结束
                while ((tempString = reader.readLine()) != null) {

                    //起始行数过滤
                    if (!fromThisLine) {
                        fromThisLine = tempString.contains(startFlag);
                        if (fromThisLine) {
                            appendString.append(tempString);
                        }
                        continue;
                    }

                    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));
                        //根据不同的尺寸,计算新的值,拼接新的字符串,并且结尾处换行。
                        DecimalFormat df = new DecimalFormat(".00");
                        double dou = num + num * rotate * (i + 1);
                        appendString.append("\r\n").append(start).append(df.format(dou)).append(end);
                    } else {
                        appendString.append("\r\n").append(tempString);
                    }
                }
                reader.close();

                System.out.println("<!-- Finish -->");

                System.out.println(appendString);


                writeFile(targetFile, appendString.toString());

            } catch (IOException e) {

                e.printStackTrace();

            }
        }
    }


    /**
     * 写入方法
     */

    public static void writeFile(String file, String text) {
        PrintWriter out = null;
        try {
            out = new PrintWriter(new BufferedWriter(new FileWriter(file)));
            out.println(text);
        } catch (IOException e) {
            e.printStackTrace();
        }
        out.close();
    }

    public static void main(String[] args) {

        gen();

    }

}

 

### 回答1: 在Android开发中,dimen可以用来定义尺寸大小,例如textSize、padding等。为了方便维护和管理,我们可以将dimen值定义在dimens.xml文件中,然后在布局、代码、样式等文件中进行引用。 例如,我们在dimens.xml文件中定义了一个dimen值: ```xml <dimen name="text_size">16sp</dimen> ``` 然后在布局文件中使用该dimen值: ```xml <TextView android:id="@+id/my_text_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="@dimen/text_size" android:text="Hello World!" /> ``` 这样,在代码中修改text_size的值时,所有引用该dimen值的地方都会自动更新。 ### 回答2: 在Android中,dimen引用用于管理尺寸值,可以在不同的布局文件和代码中引用同一尺寸值。这种引用的方式可以提高代码的灵活性和可维护性。 在使用dimen引用时,我们先需要在res/values文件夹下的dimens.xml文件中定义相关的尺寸值,例如: ```xml <resources> <dimen name="text_size_small">12sp</dimen> <dimen name="text_size_medium">16sp></dimen> <dimen name="text_size_large">20sp></dimen> </resources> ``` 在定义完尺寸值后,我们可以在布局文件或代码中使用这些尺寸值。在布局文件中使用时,可以通过@dimen/尺寸值名称的方式引用,例如: ```xml <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="@dimen/text_size_small" android:text="Hello World" /> ``` 同样地,在代码中也可以使用dimen引用,例如: ```java TextView textView = findViewById(R.id.textView); textView.setTextSize(getResources().getDimension(R.dimen.text_size_medium)); ``` 使用dimen引用的主要优点是当需要修改尺寸值时,只需要在dimens.xml文件中修改一处定义,而不需要在所有引用这个尺寸值的地方都进行修改。 总之,Android中的dimen引用是一种方便管理尺寸值的方式,可以提高代码的可维护性和灵活性,减少重复代码,并且在需要修改尺寸值时也更加方便。 ### 回答3: 在Android开发中,dimen引用是一种用于定义尺寸的一种方式。在res目录下的values文件夹中,我们可以创建dimens.xml文件来定义各种尺寸值。 使用dimen引用可以使我们的代码更具有可维护性和灵活性。当我们需要使用某个尺寸值时,我们只需要在dimens.xml文件中定义好相应的值,然后在布局文件或代码中通过引用的方式来使用。 使用dimen引用的好处是可以将尺寸值集中管理,如果我们需要修改某个值,只需要在dimens.xml文件中修改,就能够达到全局的效果。而不需要在每个布局文件或代码中都去修改对应的值。 另外,使用dimen引用还可以适配不同的屏幕尺寸和密度。在不同的设备上,尺寸值可能会有所不同,通过dimen引用,系统会根据设备的屏幕密度自动选择对应的值来使用,从而保证了界面的一致性。 在布局文件中使用dimen引用的语法如下: android:layout_width="@dimen/width_value" android:layout_height="@dimen/height_value" 在代码中使用dimen引用的语法如下: getResources().getDimensionPixelSize(R.dimen.dimen_value) 总之,使用dimen引用是一种便于管理和适配的方式,可以使我们的代码更加清晰易懂,也更加方便后期的维护和修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值