根据屏幕的宽度,动态设置控件高度

 1、获取控件宽度和高度

/**
 * 根据屏幕宽度设置高度值
 */
private int getHeight() {
    //获取屏幕宽度
    DisplayMetrics dm = new DisplayMetrics();
    double densityDpi = dm.density;
    //获取屏幕信息
    ((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(dm);

    int screenWidth = dm.widthPixels;

    int height = (int) (screenWidth - 5 * densityDpi) / 6;//每一个图片的宽度
    return height;
}

//控件设置高度
android.view.ViewGroup.LayoutParams lp = holder.layout_items.getLayoutParams();
lp.height = getHeight();

2、获取屏幕分辨率

1.使用的getHeight()与getWidth(),这种方法已经不推荐了java

2.使用getSize():android

private void getDisplayInfomation() {  
    Point point = new Point();  
    getWindowManager().getDefaultDisplay().getSize(point);  
    Log.d(TAG,"the screen size is "+point.toString());  
}

3.使用getRealSize()布局

private void getDisplayInfomation() {  
    Point point = new Point();  
    getWindowManager().getDefaultDisplay().getSize(point);  
    Log.d(TAG,"the screen size is "+point.toString());  
    getWindowManager().getDefaultDisplay().getRealSize(point);  
    Log.d(TAG,"the screen real size is "+point.toString());  
}

3、屏幕密度

屏幕密度与DPI这个概念紧密相连,DPI全拼是dots-per-inch,即每英寸的点数。也就是说,密度越大,每英寸内容纳的点数就越多。
android.util包下有个DisplayMetrics类能够得到密度相关的信息。
最重要的是densityDpi这个成员,它有以下几个经常使用值:spa

DENSITY_LOW = 120  
DENSITY_MEDIUM = 160  //默认值  
DENSITY_TV = 213      //TV专用  
DENSITY_HIGH = 240  
DENSITY_XHIGH = 320  
DENSITY_400 = 400  
DENSITY_XXHIGH = 480  
DENSITY_XXXHIGH = 640

获取方法:code

private void getDensity() {  
    DisplayMetrics displayMetrics = getResources().getDisplayMetrics();  
    Log.d(TAG,"Density is "+displayMetrics.density+" densityDpi is "+displayMetrics.densityDpi+" height: "+displayMetrics.heightPixels+  
        " width: "+displayMetrics.widthPixels);  
}

计算屏幕尺寸:图片

首先求得对角线长,单位为像素。
而后用其除以密度(densityDpi)就得出对角线的长度了。ip

densityDpi是每英寸的点数(dots-per-inch)是打印机经常使用单位(于是也被称为打印分辨率),而不是每英寸的像素数get

private void getScreenSizeOfDevice() {  
    DisplayMetrics dm = getResources().getDisplayMetrics();  
    int width=dm.widthPixels;  
    int height=dm.heightPixels;  
    double x = Math.pow(width,2);  
    double y = Math.pow(height,2);  
    double diagonal = Math.sqrt(x+y);  
  
    int dens=dm.densityDpi;  
    double screenInches = diagonal/(double)dens;  
    Log.d(TAG,"The screenInches "+screenInches);      
}

修改方法,引用PPI:it

private void getScreenSizeOfDevice2() {  
    Point point = new Point();  
    getWindowManager().getDefaultDisplay().getRealSize(point);  
    DisplayMetrics dm = getResources().getDisplayMetrics();  
    double x = Math.pow(point.x/ dm.xdpi, 2);  
    double y = Math.pow(point.y / dm.ydpi, 2);  
    double screenInches = Math.sqrt(x + y);  
    Log.d(TAG, "Screen inches : " + screenInches);  
}

4、DIP

咱们在布局文件中使用的dp/dip就是它。官方推荐使用dp是由于它会根据你设备的密度算出对应的像素。
公式为:pixel = dip*density

须要注意的是,咱们在Java代码中对控件设置宽高是不能够设置单位的,而其自带的单位是像素。因此若是动态修改控件大小时,
咱们的任务就来了,那就是将像素转换为dp。io

//pixel = dip*density;  
private int convertDpToPixel(int dp) {  
    DisplayMetrics displayMetrics = mContext.getResources().getDisplayMetrics();  
    return (int)(dp*displayMetrics.density);  
}  
  
private int convertPixelToDp(int pixel) {  
    DisplayMetrics displayMetrics = mContext.getResources().getDisplayMetrics();  
    return (int)(pixel/displayMetrics.density);  
}
相关文章
相关标签/搜索