Android 屏幕适配攻略(四)获取手机屏幕的相关信息 与动态设置控件的大小


1 动态获取手机屏幕的 屏幕密度与对应像素比例

例如在 320 * 480 尺寸为 3.2 英寸的手机 ,对应的像素密度应该为 160dpi 对应的像素比例应该是 1.0也就是 1dp = 1sp = 1px


DisplayMetrics display = new DisplayMetrics();
//将当前窗口的一些信息放在DisplayMetrics类中,
this.getWindowManager().getDefaultDisplay().getMetrics(display);float density = display.density;
//输出结果是 dens: density is  1.0
Log.e("dens","density is  "+density);//获取屏幕像素密度
int densityDpi = display.densityDpi;
//输出结果是 160
Log.e("dens","densityDpi is  "+densityDpi);//获取屏幕的高度 结果单位 px
int heightPixels = display.heightPixels;
//输出结果是 heightPixels is  480
Log.e("dens","heightPixels is  "+heightPixels);//获取屏幕的宽度 结果单位 px
int widthPixels = display.widthPixels;
//输出结果是 widthPixels is  320
Log.e("dens","widthPixels is  "+widthPixels);//获取缩放比例
float scaledDensity = display.scaledDensity;
//输出结果是 scaledDensity is  1.0
Log.e("dens","scaledDensity is  "+scaledDensity);float xdpi = display.xdpi;
float ydpi = display.ydpi;//输出结果是 xdpi is  160.0  ydpi 160.0
Log.e("dens","xdpi is  "+xdpi+"  ydpi "+ydpi);

2 动态设置控件的大小

例如在 720 * 1280 尺寸为 4.7 英寸的手机 ,对应的像素密度应该为 320dpi 对应的像素比例应该是 2.0也就是 1dp = 1sp = 2px

2.1 默认状态下的适配显示

在屏幕上设置显示一个TextView ,在布局文件中设置它的宽度为 100dp ,按照比例缩放规则,其显示在上述屏幕上的宽度应当为 200px

<TextView android:layout_width = "100dp"android:layout_height = "44dp"android:background = "#294881" />

2.2 动态设置为指定的宽度(单位为像素)

其实要实现这种效果,例如设置为指定的宽度 360 px就可,这里是书写java代码设置的方式

设置宽度为指定的像素单位,我们直接在java代码中写数字就可以,例如这里写的360,就代表在屏幕上显示的实际大小是360px

//获取TextView
TextView mTvMainShow = (TextView) findViewById(R.id.tv_main_show);//获取TextView对应的LayoutParams
LayoutParams layoutParams = mTvMainShow.getLayoutParams();if (layoutParams != null) {//设置宽度为360pxlayoutParams.width = 360;
}

2.3 动态设置为指定的宽度(单位为 dp)

在java代码中 动态设置TextView的宽度为 120dp的长度,设置为dp,意味着要随着屏幕的宽度的变化而变化,如果直接写成下面的方式,那么无论在何种手机何种屏幕上显示的大小 都是120px,并非我们期待的效果

//获取TextView
TextView mTvMainShow = (TextView) findViewById(R.id.tv_main_show);//获取TextView对应的LayoutParams
LayoutParams layoutParams = mTvMainShow.getLayoutParams();if (layoutParams != null) {layoutParams.width = 120;
}

正确的做法应当是
在java代码中 获取像素密度缩放比例,也就是获取当前的屏幕像素密度计算与 160的比例(安卓中以160dip为标准基数),然后再120与缩放比例的计算结果赋值结TextView


DisplayMetrics display = new DisplayMetrics();
//将当前窗口的一些信息放在DisplayMetrics类中,
this.getWindowManager().getDefaultDisplay().getMetrics(display);//获取缩放比例
float scaledDensity = display.scaledDensity;//获取TextView
TextView mTvMainShow = (TextView) findViewById(R.id.tv_main_show);//获取TextView对应的LayoutParams
LayoutParams layoutParams = mTvMainShow.getLayoutParams();if (layoutParams != null) {layoutParams.width = (int) (120 * scaledDensity);
}

在 720 * 1280 尺寸为 4.7 英寸的手机 ,对应的像素密度应该为 320dpi 对应的像素比例应该是 2.0也就是 1dp = 1sp = 2px

这里设置的为 120dp, 那么在这款手机屏幕上的显示的宽度应当是 240px

Android 屏幕适配攻略(四)获取手机屏幕的相关信息 与动态设置控件的大小相关推荐

  1. android 动态设置控件的大小

    TextView textView: ViewGroup.LayoutParams lp = textView.getLayoutParams(); lp.width = ViewGroup.Layo ...

  2. Android 动态创建控件并设置控件的大小之Android屏幕适配攻略(五)

    Android 屏幕适配攻略(五)动态创建控件并设置控件的大小 题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天. 重要消息 flutter中网络请求dio使用分析 视频 ...

  3. Android 屏幕适配攻略(六)设置通知样图标与启动图标适配

    Android 屏幕适配攻略(六)设置通知样图标与启动图标适配 1 Android中资源文件中的图片加载分析 Android中对屏幕的像素适配处理分类 屏幕密度 对应的标签 对应的像素 120dip ...

  4. Android 屏幕适配攻略(三)单位dp与sp

    Android 屏幕适配攻略(三)单位dp与sp 1 一般手机默认使用情况下 在安卓中,一般情况下,也就是正常使用情况下 屏幕密度 对应的标签 对应的像素 sp 120dip ldpi 1dp= 0. ...

  5. Android 屏幕适配攻略(二)单位dp与px来表示控件的尺寸

    Android 屏幕适配攻略(二)单位dp与px来表示控件的尺寸 在安卓中,将屏幕密度分为了五类 屏幕密度 对应的标签 对应的像素 120dip ldpi 1dp= 0.75px 160dip mdp ...

  6. Android 屏幕适配攻略(一)

    Android 屏幕适配攻略(一) 1 常用的单位概述 px pixels(像素) 表示屏幕实际的象素.例如,320 x 480 (也就是生活中常说的屏幕分辨率为320x480)的屏幕在横向有320个 ...

  7. Android获取屏幕宽度高度并动态设置控件宽度,比例等

    1.Android获取屏幕宽度的几种方法: //1.通过WindowManager获取DisplayMetrics dm = new DisplayMetrics();int heigth = dm. ...

  8. Android动态设置控件宽高和padding

    在开发过程中我们经常需要动态设置控件的宽高和padding.以TextView为例.如下: 布局代码 TextView的默认宽高为包裹文字,添加了一个背景颜色设置参数后更直观看到效果 <?xml ...

  9. android 动态设置padding,Android动态设置控件大小以及设定margin以及padding值

    http://www.aichengxu.com/Java/73893.htm Android动态设置控件大小以及设定margin以及padding值,有需要的朋友可以参考下. 一.概述 在andro ...

最新文章

  1. 一篇文章搞懂JavaScript运行机制
  2. my rank in math in the domain of pure mathematics
  3. IE盒模型和标准盒模型
  4. ZNZD平台vue项目
  5. 利用云计算打造政务信息化及应急指挥云平台
  6. c# url编码 字母编码_我如何通过每天30分钟编码来完成#100DaysOfCode挑战
  7. Bootstrap3 表单
  8. tsql创建表_在序列中创建缺口– TSQL存储过程顾问
  9. 【BlackHat】研究员吐槽苹果漏洞奖励计划
  10. Linux yum 安装
  11. Android-界面-布局
  12. 使用 C# 编写简易 ASP.NET Web 服务器 ---- 模拟IIS的处理过程
  13. SCTP协议与程序设计案例
  14. Texture ASTC转换ETC
  15. 机器学习概念西洋跳棋
  16. 各利不同网站的盈利模式
  17. 享元模式——滴滴打车的共享经济思维
  18. 建筑企业“出租脚手架”究竟如何缴纳增值税
  19. 【多传感器融合定位】【从零开始做自动驾驶定位_任佬】【所学到的东西汇总】
  20. php 周易,GitHub - jyiL/lunarPHP: 易经六十四卦排盘类库

热门文章

  1. 谷歌 NAS + 目标检测 新作:SpineNet
  2. ​全网首发,TensorFlow 2.0 中文视频教程来啦
  3. PyTorch一年增长194%,超越TensorFlow指日可待
  4. CV Code | 本周新出计算机视觉开源代码汇总(含图像修复、目标检测、医学图像分割、度量学习等)...
  5. 未来2年,会Python的人将会非常抢手
  6. 【OpenCV】OpenCV函数精讲之 -- 图像容器Mat
  7. 收藏 | 聊聊 GPU 的计算能力上限
  8. 一个实例带你搞懂Apriori关联分析算法
  9. NLP基础|中英文词向量评测理论与实践
  10. 非对称卷积—Asymmetric Convolutions