屏幕大小及单位计算的工具类
ScreenUtil.java
import android.content.Context;
import android.content.res.Resources;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.ListAdapter;
import android.widget.ListView;
public class ScreenUtil {
/**
* 获取屏幕的大小
*
* @param context
* 当前上下文
* @return 屏幕尺寸对象
*/
public static Screen getScreenPix(Context context) {
DisplayMetrics dm = new DisplayMetrics();
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
windowManager.getDefaultDisplay().getMetrics(dm);
return new Screen(dm.widthPixels, dm.heightPixels);
}
/**
* 获取屏幕的宽
*
* @param context
* 当前上下文
* @return 屏幕宽
*/
public static int getScreenWidthPix(Context context) {
DisplayMetrics dm = new DisplayMetrics();
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
windowManager.getDefaultDisplay().getMetrics(dm);
return dm.widthPixels;
}
/**
* 获取屏幕的高
*
* @param context
* 当前上下文
* @return 屏幕高
*/
public static int getScreenHeightPix(Context context) {
DisplayMetrics dm = new DisplayMetrics();
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
windowManager.getDefaultDisplay().getMetrics(dm);
return dm.heightPixels;
}
/**
* 屏幕信息
*
* @author wangyang
*
*/
public static class Screen {
// 屏幕宽
public int widthPixels;
// 屏幕高
public int heightPixels;
public Screen() {
}
public Screen(int widthPixels, int heightPixels) {
this.widthPixels = widthPixels;
this.heightPixels = heightPixels;
}
}
/**
* 获取屏幕密度
*
* @return float
* @throws
*/
public static float getDensity(Context context) {
DisplayMetrics dm = new DisplayMetrics();
dm = context.getResources().getDisplayMetrics();
return dm.density;
}
/**
* dp转px
*
* @param dpValue
* dp
* @return int px
* @throws
*/
public static int dp2px(Context context, float dpValue) {
return (int) (dpValue * getDensity(context) + 0.5f);
}
/**
* px 转 dp
*
* @param pxValue
* px
* @return int dp
* @throws
*/
public static int px2dp(Context context, float pxValue) {
return (int) (pxValue / getDensity(context) + 0.5f);
}
/**
* 获取状态栏高度
*
* @return
* @return int
* @throws
*/
public static int getStatusBarHeight() {
return Resources.getSystem().getDimensionPixelSize(Resources.getSystem().getIdentifier("status_bar_height", "dimen", "android"));
}
/**
* 动态设置ListView的高度
* @param listView
*/
public static void setListViewHeightBasedOnChildren(ListView listView) {
if(listView == null) return;
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
// pre-condition
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"+params.height);
listView.setLayoutParams(params);
}
}