public class Main {
        //定义文件本地存储路径,可按照需求更改
        private final static String rootPath = "D:\\workfiles\\layoutroot\\values-{0}x{1}";
    
        /** 横轴方向分为320份 */
        private final static float dw = 320f;
        /** 纵轴方向分为480份 */
        private final static float dh = 480f;
    
        /** 宽度的模板 */
        private final static String WTemplate = "<dimen name=\"x{0}\">{1}px</dimen>\n";
        /** 高度的模板 */
        private final static String HTemplate = "<dimen name=\"y{0}\">{1}px</dimen>\n";
    
        public static void main(String[] args) {
            //就适配了三个分辨率的手机屏幕
            makeString(320, 480);
            makeString(720, 1280);
            makeString(1080, 1920);
        }
        
        /**
         * 生成对应分辨率的dimen文件
         * 
         * @param width
         *            手机屏幕x方向的像素数量
         * @param height
         *            手机屏幕y方向的像素数量
         */
        private static void makeString(int width, int height) {
            StringBuffer sbWidth = new StringBuffer();
            sbWidth.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
            sbWidth.append("<resources>");
            float cellw = width / dw;
            for (int i = 0; i < dw; i++) {
                sbWidth.append(WTemplate.replace("{0}", i + "").replace("{1}",
                        change(cellw * i) + ""));
            }
            sbWidth.append(WTemplate.replace("{0}", "320").replace("{1}",
                    width + ""));
            sbWidth.append("</resources>");
    
            StringBuffer sbHeight = new StringBuffer();
            sbHeight.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
            sbHeight.append("<resources>");
            float cellh = height / dh;
            for (int i = 0; i < dh; i++) {
                sbHeight.append(HTemplate.replace("{0}", i + "").replace("{1}",
                        change(cellh * i) + ""));
            }
            sbHeight.append(HTemplate.replace("{0}", "480").replace("{1}",
                    height + ""));
            sbHeight.append("</resources>");
    
            String path = rootPath.replace("{0}", height + "").replace("{1}",
                    width + "");
            File rootFile = new File(path);
            if (!rootFile.exists()) {
                rootFile.mkdirs();
            }
    
            File layxFile = new File(path + "\\lay_x.xml");
            File layyFile = new File(path + "\\lay_y.xml");
    
            try {
                PrintWriter pw = new PrintWriter(new FileOutputStream(layxFile));
                pw.print(sbWidth.toString());
                pw.close();
                pw = new PrintWriter(new FileOutputStream(layyFile));
                pw.print(sbHeight.toString());
                pw.close();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
        /**
         * 将浮点数小数点后保留两位小数
         */
        private static float change(float a) {
            int temp = (int) (a * 100);
            return temp / 100f;
        }

}

将生成的values文件复制到工程的res下,

使用用例:
android:layout_width="@dimen/x160"

Android-------手机屏幕适配之文件适配的更多相关文章

  1. 获取Android 手机屏幕宽度和高度以及获取Android手机序列号

    1.获取Android 手机屏幕宽度 1 DisplayMetrics dm = new DisplayMetrics(); 2 this.getWindowManager().getDefaultD ...

  2. Unity3D Android手机屏幕分辨率问题

    Android手机屏幕分辨率五花八门,导致开发时不好把握,还好各个引擎对这个屏幕分辨率问题都有较好的处理方式:unity3D 也为我们提供了一个不错的解决方案. 在Unity3D 进行 android ...

  3. Android开发——Android手机屏幕适配方案总结

    )密度无关像素,单位为dp,是Android特有的单位 Android开发时通常使用dp而不是px单位设置图片大小,因为它可以保证在不同屏幕像素密度的设备上显示相同的效果. /** * dp与px的转 ...

  4. Pyqt adb 获取Android手机屏幕

    adb的全称为Android Debug Bridge,就是起到调试桥的作用.adb的工作方式比较特殊,采用监听Socket TCP 5554等端口的方式让IDE和Qemu通讯,默认情况下adb会da ...

  5. Droid@screen:在PC屏幕上显示Android手机屏幕

    这里介绍一款工具——Droid@screen,用来获取手机屏幕,显示在PC屏幕上.它集截图.录像等多种功能于一体. 安装 1.    下载地址:http://droid-at-screen.org/d ...

  6. android 使用asm.jar将android手机屏幕投射到电脑

    使用asm.jar将Android手机到电脑屏幕投影 有时候可能须要将手机上的一些操作投影出来,比方一些App Demo的展示等.事实上,有专门的硬件设备能干这件事儿.但不是必需专门为展示个Demo去 ...

  7. 无需Root实现Android手机屏幕流畅投影到电脑进行演示(附软件下载)

    近期要在公司的会议上演示App,须要在投影仪上显示出来给大家演示.因为投影仪不是智能投影仪,仅仅能将App先投影到自己的笔记本上.然后再将笔记本上的内容投影到投影仪上.该App是个游戏,实时交互性比較 ...

  8. 用802.11n 加速,将android手机屏幕投影到win7电脑上

    在做Android应用开发的时候,经常需要将已经完成的应用展示给一同开发的小伙伴,然而一直感觉没有找到一种十分方便的办法.特别是看到了开发IOS的小伙伴在做展示的时候的方便.因为Apple既做PC,也 ...

  9. EasyPusher实现Android手机屏幕桌面直播,实时推送操作画面,用于手游直播等应用

    本文转自EasyDarwin开源团队成员John的博客:http://blog.csdn.net/jyt0551/article/details/52651194 由于Android 5.0提供了捕获 ...

随机推荐

  1. Django REST Framework学习——Android使用REST方法访问Diango

    本文更应该叫做Android如何模拟浏览器访问Django服务器后台. 环境为: Android通过HttpClient访问服务器,从Django中获取json数据,解析显示在UI界面上. 问题为: ...

  2. .net简单页面后台绑定下拉框,按钮,分页 后台cs文件

    二.cs文件 using System;using System.Collections.Generic;using System.Web.UI;using System.Web.UI.WebCont ...

  3. objective-C nil,Nil,NULL 和NSNull的小结

    nil用来给对象赋值(Object-C的任何对象都属于id类型),NULL则给任何指针赋值,NULL和nil不能互换,nil用于类指针赋值(在Object-C中类是一个对象,是类的meta-class ...

  4. 0301——UItableView

    - (void)viewDidLoad { [super viewDidLoad]; self.myTableView = [[UITableView alloc]initWithFrame:CGRe ...

  5. iOS在MRC工程环境下下使用ARC的方法

  6. hdu Red and Black

    算法:深搜 题意:就是让你找到一共可以移动多少次,每次只能移到黑色格子上, Problem Description There is a rectangular room, covered with ...

  7. c#快捷键设置和text输入限制

    快捷键 使用KeyDonw事件 输入限制使用 KeyPress 事件 1.注意:如果是整个窗体的快捷键,一定要把窗体属性中的KeyPreview改为true private void textbox_ ...

  8. linux管理员切换与管理员密码第一次设置

    在终端输入su - root回车来切回到超级管理员,Ubuntu的默认超级管理员root密码是随机的,即每次开机都有一个新的root密码.我们可以在终端输入命令 sudo passwd,然后输入当前用 ...

  9. 机器学习之K近邻算法(KNN)

    机器学习之K近邻算法(KNN) 标签: python 算法 KNN 机械学习 苛求真理的欲望让我想要了解算法的本质,于是我开始了机械学习的算法之旅 from numpy import * import ...

  10. yii开启gii功能

    如果不想面对黑白界面,那么yii框架,给我们提供了一个模块gii 在配置文件中main.php 再通过访问模块的方式访问gii