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

 一、获取控件宽度和高度
/**
 * 根据屏幕宽度设置高度值
 */
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();
二、获取屏幕分辨率

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

2.使用getSize():

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());  
}  
三、屏幕密度

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

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  

获取方法:

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)就得出对角线的长度了。

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

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:

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);  
}  
四、DIP

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

需要注意的是,我们在Java代码中对控件设置宽高是不可以设置单位的,而其自带的单位是像素。所以如果动态修改控件大小时,
我们的任务就来了,那就是将像素转换为dp。

//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);  
} 

 

转载于:https://my.oschina.net/u/2320057/blog/534636

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值