美文网首页
关于安卓dimens的适配处理

关于安卓dimens的适配处理

作者: 初见soulmate | 来源:发表于2018-07-06 16:54 被阅读0次

    最近在写一个框架,对于dimens的适配感觉比较繁琐,事情并不复杂,但是如果是自己一个一个的创建文件进行copy修改也是挺累人的,我是一个有点懒的人,所以就自己写个shell脚本解决一下了。

    脚本已经写好了,经过测试运行正常,相关注释也写的很清晰,内容如下:

    #!/bin/bash
    
    
    #将values里面的dimens的数据copy到其他文件里面
    function copydata ( )
    {
        #用于处理shell将空格当成换行的问题
        IFS_old=$IFS
        IFS=$'\n'
    
        #scale=$(($1 / 320)) | bc
        scale=$(echo "scale=1;1.0*$1/320"|bc)
        echo ${scale}
        echo -e "<resources>" >> $2
        for line2 in `cat $3`
        do
            if [[ ${line2} == *"dimen"* ]]; then
                #截取右边字符串
                right=${line2#*>}
                #截取左边字符串
                mid=${right%px*}
                new=$(echo "scale=1;${mid} * ${scale}"|bc)
                echo -e ${line2%${mid}*}${new}${line2#*${mid}} >> $2
            fi
        done
        echo -e "</resources>" >> $2
    
        IFS=${IFS_old}
    }
    
    
    #==========================================
    currentPath=$(pwd)
    basepath=""
    frompath=""
    tofile="/dimens.xml"
    mention="配置文件dmconfig.txt放在工程根目录下,相关格式如下:\n
                frompath:/app/src/main/res/values/dimens.xml\n
                topath:/app/src/main/res\n
                320\n
                480\n
                720\n
                960\n
                1080"\n
    #读取配置文件
    for line in `cat ${currentPath}"/dmconfig.txt"`
    do
        if [[ ${line} == *"frompath"* ]];
        then
            #获取copy源地址
            echo "开始获取源地址。。。"
            frompath=${currentPath}${line#*frompath:}
        elif [[ ${line} == *"topath"* ]];
        then
            #获取需要copy过去的路径
            echo "开始保存位置地址。。。"
            basepath=${currentPath}${line#*topath:}"/values-sw"
        else
            if [[ ${frompath} != *"src/main/res"* ]]; then
                echo -e "【错误】源文件地址配置配置错误!!!\n"${mention}
                exit
            fi
            if [[ ${basepath} != *"src/main/res"* ]]; then
                echo -e "【错误】配置文件位置错误!!!\n"${mention}
                exit
            fi
            echo "开始进行相关文件配置"
            #如果没有相关文件夹则创建
            cdir=${basepath}${line}"dp"
            if [ ! -d ${cdir} ]; then
                mkdir ${cdir}
            fi
    
            #如果已经存在该文件则进行删除
            cfile=${cdir}${tofile}
            if  [ -e ${cfile} ]; then
                cmd="rm "${cfile}
                eval $cmd
            fi
    
            #创建相关文件并写入相关数据
            cmd="touch "${cfile}
            eval $cmd
    
            #复制数据到适配文件里面
            echo "开始进行相关文件拷贝"
            copydata ${line} ${cfile} ${frompath}
        fi
    
    done
    
    
    
    

    使用的话需要在工程根目录创建一个dmconfig.txt的配置文件,内容如下:
    第一行指定源文件,就是基本文件,需要里面的dimens的单位是px。
    第二行是拷贝的目录地址。
    第三行及以下是相关的分辨率,根据需要指定,个数不限。

    frompath:/app/src/main/res/values/dimens.xml
    topath:/app/src/main/res
    320
    480
    720
    960
    1080
    

    另外需要在根目录下创建dimens.sh的文件,内容的话直接拷贝上面的内容即可。
    配置好了之后在Terminal中输入:
    按回车之后就搞定了,如果修改了基本dimens里面的数据需要同步,再重新运行命令即可,灰常方便。

    ./dimens.sh
    

    相关效果如下:

    7131C608-1728-459D-AF28-65D200C5A6F7.png
    4011D5DD-DFFD-4A56-BCE4-587BFA919344.png

    相关文章

      网友评论

          本文标题:关于安卓dimens的适配处理

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