android density 和款高度,Android Density(密度)
1. 什么是density
引用
1) density
density表示每英寸有多少个显示点(逻辑值),它的单位是dpi:dot per
inch,通常屏幕大时,density就大,屏幕小时,density就小,通常
屏幕实际分辨率为240px*400px时,density=120
屏幕实际分辨率为320px*533px,density=160
屏幕实际分辨率为480px*800px,density=240
2) 分辨率
是整个屏是多少点,比如800x480,它是软件的显示单位
3)
从Android1.6版本开始支持density(对应API Level 4)
用于解决应用在屏幕大小不同的硬件上正常显示的问题
2. 相关代码及设置
引用
1) AndroidManifest.xml
这个参数在API
Level 4也就是SDK 1.6以后才启用的,而且1.6版本的API Level 4的应用默认值就是True
2) 资源目录名(android
2.0以后)
res/xxx-hdpi
当density为240时,使用此目录下的资源
res/xxx-mdpi 当density为160时,使用此目录下的资源
res/xxx-ldpi 当density为120时,使用此目录下的资源
res/xxx
不常后缀,为默认设置,同xxx-mdpi
3) 资源单位(xml文件中定义大小的单位)
a) dp=dip=dx (Density
independent
pixel)
基于屏幕密度的抽象单位,设备无关的点,用于说明与密度无关的尺寸和位置。这些单位是相对于一个160dpi的屏幕,所有一个dp是160dpi屏幕上的一个点。
b) px
px指软件的单位点,设备相关的点
c) 具体使用
i.布局时尽量使用单位dip,少使用px
若使用px,如果设某控件大小400x400px,在800x480上显示正常,而在533x320的屏上就超出屏幕了
若使用dp,如果设某控件大小为160x160dp,就可以通过从系统中取density来算出真正的大小,比如在800x480屏的density设为240,而533x320屏的density设为160,借以下公式计算
pixels
= dips * (density /
160)
在800x480在屏中显示240象素,而在533x320的屏中显示为160象素,控件在屏中显示的比例是一样的。
ii.
内部的处理过程分为三步:
取screen中其它元素,转为应用的值,计算应用各控件位置,然后再转成800x480以供真正显示
若res-xxx不存在,则读取res有的资源,然后对其做相应缩放
3. 实现density的关键源码
引用
1) BitmapFactory.java(用于缩放图片)
2)
ComptibilityInfo.java(用于位置计算)
4、取得屏幕信息(宽高等)
Java代码
publicstaticString getDisplayMetrics(Context cx) {
String str ="";
DisplayMetrics dm =newDisplayMetrics();
dm = cx.getApplicationContext().getResources().getDisplayMetrics();
intscreenWidth = dm.widthPixels;
intscreenHeight = dm.heightPixels;
floatdensity = dm.density;
floatxdpi = dm.xdpi;
floatydpi = dm.ydpi;
str +="The absolute width:"+ String.valueOf(screenWidth) +"pixels\n";
str +="The absolute heightin:"+ String.valueOf(screenHeight)
+"pixels\n";
str +="The logical density of the display.:"+ String.valueOf(density)
+"\n";
str +="X dimension :"+ String.valueOf(xdpi) +"pixels per inch\n";
str +="Y dimension :"+ String.valueOf(ydpi) +"pixels per inch\n";
returnstr;
}public static String getDisplayMetrics(Context cx) {
String str = "";
DisplayMetrics dm = new DisplayMetrics();
dm = cx.getApplicationContext().getResources().getDisplayMetrics();
int screenWidth = dm.widthPixels;
int screenHeight = dm.heightPixels;
float density = dm.density;
float xdpi = dm.xdpi;
float ydpi = dm.ydpi;
str += "The absolute width:" + String.valueOf(screenWidth) + "pixels\n";
str += "The absolute heightin:" + String.valueOf(screenHeight)
+ "pixels\n";
str += "The logical density of the display.:" + String.valueOf(density)
+ "\n";
str += "X dimension :" + String.valueOf(xdpi) + "pixels per inch\n";
str += "Y dimension :" + String.valueOf(ydpi) + "pixels per inch\n";
return str;
}
5 取得状态栏和标题栏高度
Java代码
TextView tv1;
@Override
protectedvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_test2);
tv1 = (TextView) findViewById(R.id.TextView01);
tv1.post(newRunnable(){
publicvoidrun()
{
processLayout();
}
});
}
privatevoidprocessLayout(){
Rect rect=newRect();
Window window= getWindow();
tv1.getWindowVisibleDisplayFrame(rect);
//状态栏高度
intstatusBarHeight= rect.top;
intcontentViewTop= window.findViewById(Window.ID_ANDROID_CONTENT).getTop();
//标题栏高度
inttitleBarHeight= contentViewTop - statusBarHeight;
//测试结果:ok之后 100多 ms 才运行了
Log.v("test","=-init-= statusBarHeight="+statusBarHeight+
" contentViewTop="+contentViewTop+
" titleBarHeight="+titleBarHeight);
}TextView tv1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_test2);
tv1 = (TextView) findViewById(R.id.TextView01);
tv1.post(new Runnable(){
public void run()
{
processLayout();
}
});
}
private void processLayout(){
Rect rect= new Rect();
Window window= getWindow();
tv1.getWindowVisibleDisplayFrame(rect);
//状态栏高度
int statusBarHeight= rect.top;
int contentViewTop= window.findViewById(Window.ID_ANDROID_CONTENT).getTop();
//标题栏高度
int titleBarHeight= contentViewTop - statusBarHeight;
//测试结果:ok之后 100多 ms 才运行了
Log.v("test", "=-init-= statusBarHeight="+statusBarHeight+
" contentViewTop="+contentViewTop+
" titleBarHeight="+titleBarHeight);
}
android density 和款高度,Android Density(密度)相关推荐
- Android获取的状态栏高度,Android中获取状态栏高度的两种方法分享
前言 最近在做一个关于FAB的功能的时候需要获取状态栏的高度,在网上查了很多种方法,下面是选出的比较合理的两个方法.主要参考stackoverflow的这篇问答:http://stackoverflo ...
- android ?attr得到状态栏高度,android - 状态栏下方的CoordinatorLayout + CollapsingToolbarLayout滚动 - 堆栈内存溢出...
我的布局有一个奇怪的问题. 我有一个带有CollapsingToolBarLayout的CoordinatorLayout . 我有一个透明的状态栏,可以在顶部更好地显示图像. 因此,我在此Image ...
- android 电池栏的高度,Android如何取得状态栏、任务栏高度
释放双眼,带上耳机,听听看~! 对于在Android中取得状态栏.任务栏高度这个问题是很多用户们都表示好奇的,那么接下来我们就一起去看看Android如何取得状态栏.任务栏高度的内容. package ...
- android 获取textview的高度,Android TextView 高度问题
参考:https://www.cnblogs.com/tc310/p/12721754.html 前言: 在我们做界面开发的时候,UI的标注图中经常是标注了文字的字号和文件的间距.而当我们使用多个Te ...
- android seekbar 代码设置高度,Android - 如何更改默认的SeekBar厚度?
Vaibhav Jani.. 30 你必须改变progressDrawable和thumb的SeekBar来调整它的厚度: android:id="@+id/seekBar" an ...
- android弹出键盘高度,Android 解决全面屏 软键盘弹出会有高度约50dp的白条。
效果对比图片先走 解决前效果图 T_X0~JU{WQ2FC1W$M})J%1S.jpg 解决完成后效果图 0EBFD68FC050B16866B81321E0FD9C62.jpg /** * @aut ...
- android记录当前滚动高度,Android自定义View - ScrollView实时获取滚动距离
一.环境 安卓系统:4.2 操作系统:Win 8.1 工具:Android Studio 二.自定义 ScrollView ScrollView 里有一个 onScrollChange 方法,滚动的时 ...
- android获取relativelayout的高度,android RelativeLayout 动态设置高度
Linux服务部署 1. 构建NTP时间服务器 NTP服务器是用于局域网服务器时间同步使用的,可以保证局域网所有的服务器与时间服务器的时间保持一致,某些应用对时间实时性要求高的必须统一时间.互联网的时 ...
- android dp不同高度,Android获取屏幕的宽度和高度(dp)
相信各位做Android开发的朋友们对Android手机做适配是件很烦的事.在美工里一般用的单位是px,而Android为了适配,官方提供了dp这样一个单位在布局文件里使用.但是如果要动态调整控件的大 ...
最新文章
- linux安装tune2fs工具,linux tune2fs简解(每日一令之五)
- php 工商银行公众号支付代码_微信支付PHP SDK —— 公众号支付代码详解
- 成功解决urllib.error.URLError urlopen error Errno 11004 getaddrinfo failed
- java中实现将十六进制按位取反
- Altium designer中元器件重新编号,会残留之前的编号,浅色有括号——消除办法
- 《Adobe Illustrator CC 2014中文版经典教程(彩色版)》—第1课1.4节修改图稿的视图...
- 双纵坐标的绘图命令_工程师绘图必备软件——OriginLab 2019b
- 云存储应用是视频监控系统发展的必然需求
- 毕业三年,同学基本都辞职了,大部分人看完很有同感~
- webpack-工程化工具
- 论文笔记:Composable Sparse Fine-Tuning for Cross-Lingual Transfer
- 无法定位程序输入点于动态链接库kernel32
- 计算机系统如何恢复出厂设置路由器,迅捷(fast)路由器恢复出厂设置后怎么重新设置?...
- window10无法自动修复此计算机,Win10系统自动修复无法修复电脑如何解决
- PHOTOSHOP绘制卡通人物简单教程
- 从EXCEL的超链接中批量提取图片
- switch()语句中,default,break关键字作用,以及贯穿问题
- 历届蓝桥杯Scratch编程省赛 初级 中级 青少年编程比赛省赛真题解析【持续更新 已更新至35题】
- Windows操作系统深入解析原理
- [kuangbin带你飞]专题1