Android开发

Android的TexView的TextSize统一从sp单位替

2025-02-06  本文已影响0人  Young岛主

使用脚本替换安卓布局XML文件,textSize从sp单位替换为mm单位

#!/bin/bash

# 示例输入文本
# input_text='这是一个 "10sp" 的示例,还有 "25sp" 和 "5.0sp" 等。'

# 使用 perl 进行替换操作
# output_text=$(echo "$input_text" | perl -pe 's/"([0-9.]+)sp"/sprintf("%.1fmm",($1\/2.5))/ge')

# 输出替换后的文本
# echo "$output_text"

# 检查是否提供了目录参数
if [ $# -ne 1 ]; then
    echo "用法: $0 <目录路径>"
    exit 1
fi

# 获取指定的目录路径
target_dir="$1"

# 检查目录是否存在
if [ ! -d "$target_dir" ]; then
    echo "指定的目录 $target_dir 不存在。"
    exit 1
fi

# 递归遍历目录及其子目录下的所有 XML 文件
find "$target_dir" -type f -name "*.xml" | while read -r xml_file; do
    # 使用 perl 进行替换操作并直接修改文件
    perl -i -pe 's/"([0-9.]+)sp"/sprintf("\"%.1fmm\"", $1\/6.35)/ge' "$xml_file"
    echo "已处理文件: $xml_file"
done

echo "所有 XML 文件处理完成。"

脚本解释

  1. 参数检查
if [ $# -ne 1 ]; then
    echo "用法: $0 <目录路径>"
    exit 1
fi

该部分代码用于检查脚本运行时是否传入了一个参数。若没有提供或者参数数量不正确,脚本会输出使用说明并退出。

  1. 获取并检查目标目录
target_dir="$1"
if [ ! -d "$target_dir" ]; then
    echo "指定的目录 $target_dir 不存在。"
    exit 1
fi

此部分获取用户输入的目录路径,并检查该目录是否真实存在。若目录不存在,脚本会输出错误信息并终止执行。

  1. 递归查找 XML 文件
find "$target_dir" -type f -name "*.xml" | while read -r xml_file; do
    ...
done

利用 find 命令递归地在指定目录及其子目录中查找所有扩展名为 .xml 的文件。通过管道将找到的文件路径传递给 while 循环进行后续处理。

  1. 对 XML 文件进行内容替换
perl -i -pe 's/"([0-9.]+)dp"/sprintf("\"%.1fmm\"", $1 / 2.5)/ge' "$xml_file"

对于每个找到的 XML 文件,使用 perl 命令进行替换操作。-i 选项表示直接修改文件内容。正则表达式 s/"([0-9.]+)dp"/sprintf(""%.1fmm"", 1 / 2.5)/ge 的含义如下: 正则匹配部分 "([0-9.]+)dp":用于匹配双引号内以数字(可以包含小数点)开头并以 dp 结尾的字符串,([0-9.]+) 是捕获组,用于提取数字部分。 替换部分 sprintf("\"%.1fmm\"",1 / 2.5):sprintf 是格式化输出函数,%.1f 表示将捕获到的数字 $1 除以 2.5 后保留小数点后 1 位,然后拼接上 "mm",并在前后加上双引号。
g 标志:表示全局替换,会对文件中所有匹配的字符串进行替换。
e 标志:允许在替换部分执行 perl 代码,实现数值计算。

  1. 输出处理信息
echo "已处理文件: $xml_file"

在每次完成一个文件的处理后,输出该文件的路径信息,让用户了解处理进度。

  1. 处理完成提示
echo "所有 XML 文件处理完成。"

当所有符合条件的 XML 文件都处理完毕后,输出完成提示信息。
使用方法
将上述脚本保存为一个文件,例如 process_xml.sh。
为脚本添加执行权限:

chmod +x process_xml.sh

运行脚本并指定要处理的目录路径:

./process_xml.sh /your/target/directory

将 /your/target/directory 替换为你实际想要处理的目录路径即可。运行脚本后,该目录及其子目录下所有 XML 文件中符合条件的字符串都会被替换。

上一篇 下一篇

猜你喜欢

热点阅读