获取屏幕宽高,和dp,px,sp的转化工具类

原创 2015年07月09日 10:57:15

在项目适配中我们经常会用到dp装px来适应屏幕,还有就是在我们自定义View中的绘画也需要适配.

代码如下:

import java.lang.reflect.Field;

import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.WindowManager;

/**
 * 屏幕尺寸, 像素 ,
 * @author Administrator
 *
 */
public final class ScreenUtil {

	/**
	 * dp 转 px
	 * @param context
	 * @param dipValue
	 * @return
	 */
	public static int dip2px(Context context, float dipValue) {
		final float scale = context.getResources().getDisplayMetrics().density;
		return (int) (dipValue * scale + 0.5f);
	}

	/**
	 * px 转 dp
	 * @param context
	 * @param pxValue
	 * @return
	 */
	public static int px2dip(Context context, float pxValue) {
		final float scale = context.getResources().getDisplayMetrics().density;
		return (int) (pxValue / scale + 0.5f);
	}

	/**
	 * px 转 sp
	 * 
	 * @param pxValue
	 * @return
	 */
	public static int px2sp(Context context, float pxValue) {
		final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
		return (int) (pxValue / fontScale + 0.5f);
	}

	/**
	 * sp 转 px
	 * 
	 * @param spValue
	 * @return
	 */
	public static int sp2px(Context context, float spValue) {
		final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
		return (int) (spValue * fontScale + 0.5f);
	}

	@SuppressWarnings("deprecation")
	public static int getWindowsW(Context context) {
		WindowManager wm = (WindowManager) context
				.getSystemService(Context.WINDOW_SERVICE);
		return wm.getDefaultDisplay().getWidth();
	}

	public static float getScreenDensity(Activity context) {
		DisplayMetrics dm = new DisplayMetrics();

		context.getWindowManager().getDefaultDisplay().getMetrics(dm);

		return dm.density;

	}

	@SuppressWarnings("deprecation")
	public static int getWindowsH(Context context) {
		WindowManager wm = (WindowManager) context
				.getSystemService(Context.WINDOW_SERVICE);
		return wm.getDefaultDisplay().getHeight();
	}

	/**
	 * 获取状态栏高度
	 * @param context
	 * @return
	 */
	public static int getStatusHeight(Context context) {
		Class<?> c = null;
		Object obj = null;
		Field field = null;
		int x = 0, sbar = 0;
		try {
			c = Class.forName("com.android.internal.R$dimen");
			obj = c.newInstance();
			field = c.getField("status_bar_height");
			x = Integer.parseInt(field.get(obj).toString());
			sbar = context.getResources().getDimensionPixelSize(x);
		} catch (Exception e1) {
			Log.e("ScreenUtil", "get status bar height fail");
			e1.printStackTrace();
		}
		Log.i("status_height", "" + sbar);
		return sbar;
	}

	public static boolean isRunningForeground(Context context) {
		ActivityManager am = (ActivityManager) context
				.getSystemService(Context.ACTIVITY_SERVICE);
		return context.getPackageName().equals(
				am.getRunningTasks(1).get(0).topActivity.getPackageName());
	}
}

Android获取屏幕分辨率及dp与 pix间的转换

获取屏幕分辨率代码: public void onCreate(Bundle savedInstanceState) {           super.onCreat...
  • cnmilan
  • cnmilan
  • 2014年07月30日 14:01
  • 11545

dp, sp, 与 px 互相转换的工具类

dp, sp, 与 px 互相转换的工具类
  • yang786654260
  • yang786654260
  • 2015年11月26日 16:17
  • 1241

屏幕适配,px和dp, sp换算公式

换算公式: PPI =(长度像素数² + 宽度像素数²) / 屏幕对角线英寸数 px = dp*ppi/160 dp = px / (ppi / 160) sp = px / (ppi / 16...
  • qq_25804863
  • qq_25804863
  • 2015年10月21日 22:16
  • 5592

我的Android进阶之旅------>Android关于dp(dip)、sp转px的工具类

下面是一个工具类,提供了dp、sp、px之间相互转化的方法。 import android.content.Context; /** * dp、sp 转换为 px 的工具类 * CSDN Ou...
  • qq446282412
  • qq446282412
  • 2015年08月07日 15:20
  • 1463

android中px与sp,dp之间的转换

由于Android手机厂商很多,导致了不同设备屏幕大小和分辨率都不一样,然而我们开发者要保持在不同设备上显示同样的视觉效果,就需要做一些适配效果。 相关名词解释 屏幕大小:通常指的是屏幕对角线的长...
  • qidingquan
  • qidingquan
  • 2016年12月17日 22:00
  • 2589

Android屏幕适配(一)dp、px、dpi、sp的理解

在Android开发过程中,屏幕适配往往是开发人员比较忽视的一个知识点。往往这些被忽视的东西在遇到问题的时候会耗费你比较多的时间。所以对于初级程序员来说理解掌握适配的一些基本知识是必须的。(大牛请移步...
  • yuanmingxiang
  • yuanmingxiang
  • 2016年05月12日 15:23
  • 2160

Android中dp,px,sp概念梳理以及如何做到屏幕适配

今天又开始我的App开发,因为之前一直做的是SDK,所以涉及到界面UI很少,ga
  • jiangwei0910410003
  • jiangwei0910410003
  • 2014年10月27日 17:54
  • 64870

Android像素单位dp、sp、px、pt的区别和比较

目录结构目录结构 前言 度量单位含义 换算规则前言在分辨率没有牛逼到爆的过去,程序员通常以像素为单位设计计算机用户界面。例如,图片大小为80×32像素。这样处理的问题在于,如果在一个每英寸像素点数更高...
  • zinss26914
  • zinss26914
  • 2015年02月11日 11:56
  • 4422

【Android技术】Android px、dp、sp之间相互转换

转载自:http://blog.csdn.net/fx_sky/article/details/8588703 dp(dip): device independent pixels(设备独立像素)....
  • yigelangmandeshiren
  • yigelangmandeshiren
  • 2013年06月17日 14:26
  • 20256

Android 获取控件的宽高 dp和px之间的转换

public class MainActivity extends Activity { private ImageView imageView; private String TAG="de...
  • sinat_18754601
  • sinat_18754601
  • 2014年08月01日 17:45
  • 1303
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:获取屏幕宽高,和dp,px,sp的转化工具类
举报原因:
原因补充:

(最多只允许输入30个字)