Android屏幕适配工具类 Android自动生成不同分辨率的值

本文实例为大家分享了Android屏幕适配工具类的具体代码,供大家参考,具体内容如下

DimenTool

github地址

Android 屏幕适配方案,自动生成不同分辨率的值

android中官方建议的屏幕适配方式,通过根据不同的分辨率在工程的res文件夹下建立不同的尺寸文件夹,每个文件夹下都建立dimens.xml文件。然后根据不同的尺寸在dimens.xml文件夹中分别计算配置不同的dp或者sp单位。开发中发现,android屏幕适配需要用到很多的尺寸,每个尺寸都建立dimens.xml问价。每个文件中的数值都要按照比例去计算,一个一个拿着计算器去计算吗?这样太麻烦了。今天有一个好的办法,来为大家介绍一下。

步骤

1.在工程的java文件夹下把项目的DimenTool.java复制到该文件夹下。

/**
 * Created by cdy on 2016/2/3.
 * 快速生成适配工具类 ,直接运行不成功需手动放入目录文件中
 */
public class DimenTool {

 public static void gen() {
 //以此文件夹下的dimens.xml文件内容为初始值参照
 File file = new File("./app/src/main/res/values/dimens.xml");

 BufferedReader reader = null;
 StringBuilder sw240 = new StringBuilder();
 StringBuilder sw320 = new StringBuilder();
 StringBuilder sw360 = 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");
  sw320.append(start).append( num * 1).append(end).append("\r\n");
  sw360.append(start).append( num * 1.125).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("");
  sw320.append(tempString).append("");
  sw360.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("<!-- sw320 -->");
 System.out.println(sw320);
 System.out.println("<!-- sw360 -->");
 System.out.println(sw360);
 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 = "./app/src/main/res/values-sw240dp/dimens.xml";
 String sw320file = "./app/src/main/res/values-sw320dp/dimens.xml";
 String sw360file = "./app/src/main/res/values-sw360dp/dimens.xml";
 String sw480file = "./app/src/main/res/values-sw480dp/dimens.xml";
 String sw600file = "./app/src/main/res/values-sw600dp/dimens.xml";
 String sw720file = "./app/src/main/res/values-sw720dp/dimens.xml";
 String sw800file = "./app/src/main/res/values-sw800dp/dimens.xml";

 String w820file = "./app/src/main/res/values-w820dp/dimens.xml";
 //将新的内容,写入到指定的文件中去
 writeFile(sw240file, sw240.toString());
 writeFile(sw320file, sw320.toString());
 writeFile(sw360file, sw360.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);
 } catch (IOException e) {

 e.printStackTrace();

 }

 out.close();
 }
 public static void main(String[] args) {
 gen();

 }

} 

2.编写dimens下的数值(0.5-360,可根据项目来定范围,主要为以后方便使用),可直接把项目dimens复制到你的项目中

3.创建文件夹(values-sw240dp,values-sw320dp values-sw360dp…根据dimentool代码创建对应的文件夹)

4.单击鼠标右键,执行Run.Dimentools.main,对应values文件夹下即可生成对用的dimens值

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android 图片显示与屏幕适配的问题

    Android 图片显示与屏幕适配的问题 在Android开发中比较头疼的是Android的分辨率问题,那么这里给大家介绍个万能办法,这个办法的优点是可以实现万能适应,给开发和美工设计提供了依据,但是对开发来说代码量也不少,具体办法: (1)获取屏幕的尺寸 WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE); Display d = windowManager.getDefa

  • Android-屏幕适配需要注意的地方总结

    1.尽量使用线性布局(LinearLayout)和相对布局(RelativeLayout),不要使用绝对布局. 2.尽量使用dip和sp,不要使用px. 3.为不同的分辨率提供不同的布局文件和图片. 例如:  4.在AndroidMainfest.xml中设置多分辨率支持. 复制代码 代码如下: <supports-screens android:largeScreens="true" android:normalScreens="true" android:

  • Android的分辨率和屏幕适配详解

    一.为什么Android要进行分辨率与屏幕适配 最大的原因是碎片化,因为Android的开源措施和各个厂商的自己细微修改,结果就变成了这个样 需要适配的屏幕尺寸就有这么多: 这怎么可能嘛T_T. 所以我们就只照顾大部分人,根据友盟的统计数据如下: 所以只需要适配: 800x480.854x480.960x540.1184x720.1280x720.1920x1080这六种分辨率. 二.基本知识 屏幕尺寸 英寸,1英寸=2.54厘米.比如常见的屏幕尺寸有2.4.2.8.3.5.3.7.4.2.5.

  • Android 手机屏幕适配解决办法

    0. 前言 Android的屏幕适配,即使得某一元素在Android不同尺寸.不同分辨率的手机上具备相同的显示效果,这个问题一直以来都是我们Android开发者不得不面对的问题.本文参考了很多前人的博客,并对这一问题做一个总结,力求精简明了. 转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52690498 1. 基础概念 (1)屏幕尺寸,即手机对角线的物理尺寸 1英寸 = 2.54cm  常见手机尺寸有5英寸.5.5英寸.6英寸等

  • 简单谈谈我的Android屏幕适配之路

    如果你还在受老板的"这个左移一个像素,再右移两个像素看看,不对不对移回来.这个大了.你没看见吗?这个变形了!"这样的气,那么学完这篇文章,你就可以回他"我已经适配了,你没看粗来吗?" 我们先来了解两个概念:屏幕尺寸和屏幕的分辨率: 屏幕尺寸: 就是屏幕的对角线的长度,度量单位是英寸,1英寸等于2.54厘米. 例如小米5的屏幕尺寸就为5.15英寸.nexus 5的屏幕为4.95英寸. 屏幕分辨率: 实际上就是屏幕横纵坐标上面的像素点.如比较常见的1280×720,19

  • Android屏幕适配工具类 Android自动生成不同分辨率的值

    本文实例为大家分享了Android屏幕适配工具类的具体代码,供大家参考,具体内容如下 DimenTool github地址 Android 屏幕适配方案,自动生成不同分辨率的值 android中官方建议的屏幕适配方式,通过根据不同的分辨率在工程的res文件夹下建立不同的尺寸文件夹,每个文件夹下都建立dimens.xml文件.然后根据不同的尺寸在dimens.xml文件夹中分别计算配置不同的dp或者sp单位.开发中发现,android屏幕适配需要用到很多的尺寸,每个尺寸都建立dimens.xml问

  • Android手机管理工具类详解

    Android手机管理工具类 AppPhoneMgr分享给大家,供大家参考,具体内容如下 工具类内的方法: getInstance          : 单例对象 getSDKVersionNumber  : 获取手机系统版本号 getPhoneModel        : 获取手机型号 getPhoneWidth        : 获取手机宽度 getPhoneHeight       : 获取手机高度 getPhoneImei         : 获取手机imei串号 ,GSM手机的 IME

  • Android图片处理工具类BitmapUtils

    Android图片的处理工具类BitmapUtils,供大家参考,具体内容如下 项目中经常会用到图片,所以在这先简单的总结一下.闲言少叙,上代码. package com.lvstudio.myapp.utils; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import

  • Android编程录音工具类RecorderUtil定义与用法示例

    本文实例讲述了Android编程录音工具类RecorderUtil定义与用法.分享给大家供大家参考,具体如下: 以下工具类都是经过实战开发验证都是可以直接复制使用的. 录音工具类介绍: 录音工具类主要平时用来开发语音聊天的,在微信和QQ上该工具类都是常用的,因为语音聊天. 使用硬件一般都要开权限,别忘了.这里还需要搭配 Android FileUtil 类使用,为了方便才这么封装的 import android.media.MediaRecorder; import android.util.L

  • Android读写文件工具类详解

    本文实例为大家分享了Android读写文件工具类的具体代码,供大家参考,具体内容如下 public class Utils { private static String path1 = Environment.getExternalStorageDirectory().getAbsolutePath(); private static String path2 = Environment.getDownloadCacheDirectory().getAbsolutePath(); privat

  • Android相机管理工具类

    本文实例为大家分享了Android相机管理工具类的具体代码,供大家参考,具体内容如下 package com.utils.tools; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import com.shennongshi.dingdong.R; import com.shennongshi.dingdong.pztools.IntentConstant.R

  • Android Zip解压缩工具类分享

    本文实例为大家分享了Android Zip解压缩工具类的具体代码,供大家参考,具体内容如下 package com.example.zip.commons.utils; import android.util.Log; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.util.ArrayList

  • Android指纹登录工具类封装

    本文实例为大家分享了Android指纹登录工具类的封装代码,供大家参考,具体内容如下 核心 Android 指纹 是在 6.0 才出来的一个重要的功能 @RequiresApi(api = Build.VERSION_CODES.M) 核心的两个 api: FingerprintManager KeyguardManager step1 判断android 版本,如果小于 6.0 支持不了指纹 if(Build.VERSION.SDK_INT < Build.VERSION_CODES.M){

  • 实例详解Android快速开发工具类总结

    一.日志工具类 Log.java public class L { private L() { /* 不可被实例化 */ throw new UnsupportedOperationException("Cannot be instantiated!"); } // 是否需要打印bug,可以在application的onCreate函数里面初始化 public static boolean isDebug = true; private static final String TAG

  • Android AES加密工具类分享

    1.AES加密工具类 java不支持PKCS7Padding,只支持PKCS5Padding.我们知道加密算法由算法+模式+填充组成,下一篇介绍iOS和Android通用的AES加密,本篇文章使用PKCS5Padding加密方式. package com.example.aesdemo; import java.io.UnsupportedEncodingException; import javax.crypto.Cipher; import javax.crypto.spec.SecretK

随机推荐