Android 屏幕适配攻略(四)获取手机屏幕的相关信息 与动态设置控件的大小
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 屏幕适配攻略(四)获取手机屏幕的相关信息 与动态设置控件的大小相关推荐
- android 动态设置控件的大小
TextView textView: ViewGroup.LayoutParams lp = textView.getLayoutParams(); lp.width = ViewGroup.Layo ...
- Android 动态创建控件并设置控件的大小之Android屏幕适配攻略(五)
Android 屏幕适配攻略(五)动态创建控件并设置控件的大小 题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天. 重要消息 flutter中网络请求dio使用分析 视频 ...
- Android 屏幕适配攻略(六)设置通知样图标与启动图标适配
Android 屏幕适配攻略(六)设置通知样图标与启动图标适配 1 Android中资源文件中的图片加载分析 Android中对屏幕的像素适配处理分类 屏幕密度 对应的标签 对应的像素 120dip ...
- Android 屏幕适配攻略(三)单位dp与sp
Android 屏幕适配攻略(三)单位dp与sp 1 一般手机默认使用情况下 在安卓中,一般情况下,也就是正常使用情况下 屏幕密度 对应的标签 对应的像素 sp 120dip ldpi 1dp= 0. ...
- Android 屏幕适配攻略(二)单位dp与px来表示控件的尺寸
Android 屏幕适配攻略(二)单位dp与px来表示控件的尺寸 在安卓中,将屏幕密度分为了五类 屏幕密度 对应的标签 对应的像素 120dip ldpi 1dp= 0.75px 160dip mdp ...
- Android 屏幕适配攻略(一)
Android 屏幕适配攻略(一) 1 常用的单位概述 px pixels(像素) 表示屏幕实际的象素.例如,320 x 480 (也就是生活中常说的屏幕分辨率为320x480)的屏幕在横向有320个 ...
- Android获取屏幕宽度高度并动态设置控件宽度,比例等
1.Android获取屏幕宽度的几种方法: //1.通过WindowManager获取DisplayMetrics dm = new DisplayMetrics();int heigth = dm. ...
- Android动态设置控件宽高和padding
在开发过程中我们经常需要动态设置控件的宽高和padding.以TextView为例.如下: 布局代码 TextView的默认宽高为包裹文字,添加了一个背景颜色设置参数后更直观看到效果 <?xml ...
- android 动态设置padding,Android动态设置控件大小以及设定margin以及padding值
http://www.aichengxu.com/Java/73893.htm Android动态设置控件大小以及设定margin以及padding值,有需要的朋友可以参考下. 一.概述 在andro ...
最新文章
- 一篇文章搞懂JavaScript运行机制
- my rank in math in the domain of pure mathematics
- IE盒模型和标准盒模型
- ZNZD平台vue项目
- 利用云计算打造政务信息化及应急指挥云平台
- c# url编码 字母编码_我如何通过每天30分钟编码来完成#100DaysOfCode挑战
- Bootstrap3 表单
- tsql创建表_在序列中创建缺口– TSQL存储过程顾问
- 【BlackHat】研究员吐槽苹果漏洞奖励计划
- Linux yum 安装
- Android-界面-布局
- 使用 C# 编写简易 ASP.NET Web 服务器 ---- 模拟IIS的处理过程
- SCTP协议与程序设计案例
- Texture ASTC转换ETC
- 机器学习概念西洋跳棋
- 各利不同网站的盈利模式
- 享元模式——滴滴打车的共享经济思维
- 建筑企业“出租脚手架”究竟如何缴纳增值税
- 【多传感器融合定位】【从零开始做自动驾驶定位_任佬】【所学到的东西汇总】
- php 周易,GitHub - jyiL/lunarPHP: 易经六十四卦排盘类库
热门文章
- 谷歌 NAS + 目标检测 新作:SpineNet
- ​全网首发,TensorFlow 2.0 中文视频教程来啦
- PyTorch一年增长194%,超越TensorFlow指日可待
- CV Code | 本周新出计算机视觉开源代码汇总(含图像修复、目标检测、医学图像分割、度量学习等)...
- 未来2年,会Python的人将会非常抢手
- 【OpenCV】OpenCV函数精讲之 -- 图像容器Mat
- 收藏 | 聊聊 GPU 的计算能力上限
- 一个实例带你搞懂Apriori关联分析算法
- NLP基础|中英文词向量评测理论与实践
- 非对称卷积—Asymmetric Convolutions