1. 获得 android 状态栏、标题栏、屏幕高度
2. 根据屏幕高度动态调整一次拉取的数据个数
private int getMaxNum() {
int ret = 0;
int screenHeight = AndroidConfig.getScreenHeight(); // 获得屏幕高度
int statusBarHeight = AndroidConfig.getTopBarHeight(this); // 获得屏幕标题栏和状态栏高度的和
int statusBarHeight = AndroidConfig.getTopBarHeight(this); // 获得屏幕标题栏和状态栏高度的和
// 根据xml布局中,把ListView中的item高度从dip转化为px
int itemHeight = DipPixelUtil.dip2px(this, 80) + DipPixelUtil.dip2px(this, 1);
int dValue = screenHeight - statusBarHeight; // 算出ListView实际占用的屏幕高度
int itemHeight = DipPixelUtil.dip2px(this, 80) + DipPixelUtil.dip2px(this, 1);
int dValue = screenHeight - statusBarHeight; // 算出ListView实际占用的屏幕高度
if (dValue % itemHeight == 0) { // 刚好可以装下dValue个item
ret = dValue / itemHeight;
} else {
ret = dValue / itemHeight;
} else {
ret = dValue / itemHeight + 1;
}
}
return ret;
}
}
// 获得屏幕高度
public static int getScreenHeight() {
if (mScreenHeight <= 0 && mContext instanceof Context) {
DisplayMetrics dm = new DisplayMetrics();
WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
wm.getDefaultDisplay().getMetrics(dm);
mScreenHeight = dm.heightPixels;
if (mScreenHeight <= 0 && mContext instanceof Context) {
DisplayMetrics dm = new DisplayMetrics();
WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
wm.getDefaultDisplay().getMetrics(dm);
mScreenHeight = dm.heightPixels;
}
return mScreenHeight;
}
return mScreenHeight;
}
// 获得屏幕状态栏与标题栏高度之和,如果没有状态栏或标题栏其中之一,则高度为0
public static int getTopBarHeight(Activity activity) {
Rect fram = new Rect();
// 获得显示高度(不包括状态栏)
activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(fram);
int statusBarHeight = fram.top;
activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(fram);
int statusBarHeight = fram.top;
// 获得显示高度(不包括标题栏)
int contentTop = activity.getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();
int titleBarHeight = contentTop - statusBarHeight;
return statusBarHeight + titleBarHeight;
}
int titleBarHeight = contentTop - statusBarHeight;
return statusBarHeight + titleBarHeight;
}
// 根据手机的分辨率从 dp 的单位 转成为 px(像素)
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}