Android SizeUtils-尺寸相关工具类
来源:互联网 发布:知识更新速度数据 编辑:程序博客网 时间:2024/06/06 10:56
SizeUtils是一个尺寸相关工具类
功能:
1.dp转px
2.px转dp
3.sp转px
4.px转sp
5.各种单位转换
6.在onCreate()即可强行获取View的尺寸
7.获取到View尺寸的监听
8. ListView中提前测量View尺寸,如headerView
<span style="font-size:18px;background-color: rgb(255, 255, 255);">package com.blankj.utilcode.utils;import android.content.Context;import android.util.DisplayMetrics;import android.util.Log;import android.util.TypedValue;import android.view.View;/** * <pre> * author: Blankj * blog : http://blankj.com * time : 2016/8/2 * desc : 尺寸相关工具类 * </pre> */public class SizeUtils { private SizeUtils() { throw new UnsupportedOperationException("u can't instantiate me..."); } /** * dp转px * * @param context 上下文 * @param dpValue dp值 * @return px值 */ public static int dp2px(Context context, float dpValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dpValue * scale + 0.5f); } /** * px转dp * * @param context 上下文 * @param pxValue px值 * @return dp值 */ public static int px2dp(Context context, float pxValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (pxValue / scale + 0.5f); } /** * sp转px * * @param context 上下文 * @param spValue sp值 * @return px值 */ public static int sp2px(Context context, float spValue) { final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int) (spValue * fontScale + 0.5f); } /** * px转sp * * @param context 上下文 * @param pxValue px值 * @return sp值 */ public static int px2sp(Context context, float pxValue) { final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int) (pxValue / fontScale + 0.5f); } /** * 各种单位转换 * <p>该方法存在于TypedValue</p> * * @param unit 单位 * @param value 值 * @param metrics DisplayMetrics * @return 转换结果 */ public static float applyDimension(int unit, float value, DisplayMetrics metrics) { switch (unit) { case TypedValue.COMPLEX_UNIT_PX: return value; case TypedValue.COMPLEX_UNIT_DIP: return value * metrics.density; case TypedValue.COMPLEX_UNIT_SP: return value * metrics.scaledDensity; case TypedValue.COMPLEX_UNIT_PT: return value * metrics.xdpi * (1.0f / 72); case TypedValue.COMPLEX_UNIT_IN: return value * metrics.xdpi; case TypedValue.COMPLEX_UNIT_MM: return value * metrics.xdpi * (1.0f / 25.4f); } return 0; } /** * 在onCreate()即可强行获取View的尺寸 * <p>需回调onGetSizeListener接口,在onGetSize中获取view宽高</p> * <p>用法示例如下所示</p> * <pre> * SizeUtils.forceGetViewSize(view, new SizeUtils.onGetSizeListener() { * Override * public void onGetSize(View view) { * view.getWidth(); * } * }); * </pre> * * @param view 视图 * @param listener 监听器 */ public static void forceGetViewSize(final View view, final onGetSizeListener listener) { view.post(new Runnable() { @Override public void run() { if (listener != null) { listener.onGetSize(view); } } }); } /** * 获取到View尺寸的监听 */ public interface onGetSizeListener { void onGetSize(View view); } public static void setListener(onGetSizeListener listener) { mListener = listener; } private static onGetSizeListener mListener; /** * ListView中提前测量View尺寸,如headerView * <p>用的时候去掉注释拷贝到ListView中即可</p> * <p>参照以下注释代码</p> * * @param view 视图 */ public static void measureViewInLV(View view) { Log.d("tips", "U should copy the following code."); /* ViewGroup.LayoutParams p = view.getLayoutParams(); if (p == null) { p = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); } int width = ViewGroup.getChildMeasureSpec(0, 0, p.width); int height; int tempHeight = p.height; if (tempHeight > 0) { height = MeasureSpec.makeMeasureSpec(tempHeight, MeasureSpec.EXACTLY); } else { height = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); } view.measure(width, height); */ }}</span>
0 0
- Android SizeUtils-尺寸相关工具类
- Android屏幕尺寸以及相关工具类
- 尺寸相关工具类
- 尺寸相关工具类
- Android屏幕相关以及尺寸的转换工具类
- android获取尺寸相关类
- Android屏幕尺寸相关类
- 尺寸相关的工具类DensityUtils
- android 尺寸适配相关
- 屏幕和尺寸相关---Android
- Android工具类系列-DensityUtil(尺寸单位转换)
- Android的一些屏幕尺寸的工具类
- Android:屏幕相关工具类
- Android App相关工具类
- android屏幕相关工具类
- 安卓常用工具类-ControlsUtils【设备、尺寸相关的工具类】
- android 界面自适应屏幕尺寸相关
- Android工具类--网络相关类
- 蓝牙共享网络BluetoothPan
- Faster rcnn 安装、训练、测试、调试
- 学习面向对象的六大原则
- 【信号】用matlab实现一维信号的高斯滤波
- linux 下的vi 使用方法
- Android SizeUtils-尺寸相关工具类
- 登录接口
- 【机器学习】【计算机视觉】非常全面的图像数据集《Actions》
- CSS常见样式总结
- mysql中授权(grant)和撤销授权(revoke)等命令的用法详解[转]
- page.jsp 分页
- python的万物皆对象以及int深入
- 替换字符串中连续出现的指定字符串
- 用虚拟机掉的一些坑······