感恩原創(chuàng):Android屏幕分辨率工具類使用詳解_Android_腳本之家
Android開發(fā)中我們經(jīng)常需要用到將dip、px相互換算烂翰、獲取手機(jī)屏幕的寬度岩榆、高度以及狀態(tài)欄高度等怖喻,如下是基于屏幕這一塊整理的一個(gè)類如孝。
package io.agora.tutorials1v1acall;
import android.content.Context;
import android.util.DisplayMetrics;
import java.lang.reflect.Field;
/**
* Created by Administrator on 2018/5/7.
*/
public class ScreenUtil {
/**
? ? * 根據(jù)手機(jī)分辨率將dp轉(zhuǎn)為px單位
? ? */
? ? public static int dip2px(Context mContext, float dpValue) {
final float scale = mContext.getResources()
.getDisplayMetrics().density;
? ? ? ? return (int) (dpValue * scale +0.5f);
? ? }
/**
? ? * 根據(jù)手機(jī)的分辨率從 px(像素) 的單位 轉(zhuǎn)成為 dp
*/
? ? public static int px2dip(Context mContext, float pxValue) {
final float scale = mContext.getResources()
.getDisplayMetrics().density;
? ? ? ? return (int) (pxValue / scale +0.5f);
? ? }
/**
? ? * 屏幕寬高
? ? *
? ? * @param mContext 上下文
? ? * @return
? ? */
? ? private static int[]getScreenSize(Context mContext) {
DisplayMetrics dm = mContext
.getResources().getDisplayMetrics();
? ? ? ? int screenWidth = dm.widthPixels;
? ? ? ? int screenHeight = dm.heightPixels;
? ? ? ? return new int[]{screenWidth, screenHeight};
? ? }
/**
? ? * 獲取狀態(tài)欄高度
? ? *
? ? * @param mContext 上下文
? ? * @return
? ? */
? ? public static int getStatusBarHeight(Context mContext) {
Class c =null;
? ? ? ? Object obj =null;
? ? ? ? Field field =null;
? ? ? ? int x =0, statusBarHeight =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());
? ? ? ? ? ? statusBarHeight = mContext.getResources().getDimensionPixelSize(x);
? ? ? ? }catch (Exception e1) {
e1.printStackTrace();
? ? ? ? }
return statusBarHeight;
? ? }
/**
? ? * 獲取手機(jī)屏幕的寬度
? ? *
? ? * @param mContext 上下文
? ? * @return
? ? */
? ? public static int getScreenWidth(Context mContext) {
int screen[] =getScreenSize(mContext);
? ? ? ? return screen[0];
? ? }
/**
? ? * 獲取手機(jī)屏幕的高度
? ? *
? ? * @param mContext 上下文
? ? * @return
? ? */
? ? public static int getScreenHeight(Context mContext) {
int screen[] =getScreenSize(mContext);
? ? ? ? return screen[1];
? ? }
}
對于dip、dp常熙、px和sp纬乍,之前不太理解的是dip和px之間的區(qū)別,我們知道google的推薦裸卫,像素統(tǒng)一使用dip仿贬,字體統(tǒng)一使用sp,接下來具體說明一下:
1. dip: device independent pixels(設(shè)備獨(dú)立像素):不同設(shè)備顯示效果不同,dip與屏幕密度有關(guān)墓贿,而屏幕密度又和設(shè)備硬件有關(guān)茧泪,一般我們?yōu)榱酥С諻VGA、HVGA和QVGA 推薦使用這這個(gè)聋袋,不依賴像素队伟。 dip的換算: dip(value)=(int) (px(value)/1.5 + 0.5)
2. dp: 和dip是完全一樣的,只是名字不同而已幽勒。
3. px: pixels(像素)嗜侮,絕對像素,不同的設(shè)備不同的顯示屏顯示效果是一樣的啥容,這個(gè)是多少就永遠(yuǎn)是多少不會(huì)改變棘钞。
4. sp: scaled pixels(放大像素). 主要用于字體顯示。
下面引用一下上面的屏幕工具類
Log.e("獲取狀態(tài)欄高度", String.valueOf(ScreenUtil.getStatusBarHeight(mContext)));
?Log.e("獲取手機(jī)屏幕的寬度", String.valueOf(ScreenUtil.getScreenWidth(mContext)));
?Log.e("獲取手機(jī)屏幕的高度", String.valueOf(ScreenUtil.getScreenHeight(mContext)));