`

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、取得屏幕信息(宽高等)

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 取得状态栏和标题栏高度

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

}

 

分享到:
评论

相关推荐

    修改系统density、densityDpi适配

    修改density(屏幕密度,若每英寸有160像素点,该值就为1)、scaleDensity(字体缩放比例),densityDpi(屏幕上每英寸有多少像素点,如160)的值,就是修改系统内部对于目标尺寸而言的像素密度。 二、追根溯源 每个...

    获取android手机的分辨率、像素密度等

    本文将深入探讨如何获取Android手机的屏幕宽度、屏幕高度、屏幕密度(density)、字体密度(font density)以及屏幕密度DPI。 首先,我们需要理解Android设备屏幕的基本概念: 1. 分辨率:指屏幕水平和垂直方向上的...

    Android设备密度计算器

    输入手机或平板的分辨率和尺寸即可自动计算其密度,以及其他配置: small normal large xlarge ldpi mdpi hdpi xhdpi xxhdpi nodpi

    修改手机屏幕密度

    在本篇文章中,我们将深入探讨如何通过代码方式调整Android设备的屏幕密度,特别是利用`ro.sf.lcd_density=250`这一命令行来进行具体的设置。屏幕密度是衡量屏幕上像素点分布密集程度的一个指标,对于Android系统而...

    android手机分辨率 密度 等各种信息

    android手机分辨率 密度 等各种信息 String str = " 手机屏幕分辨率为: " + widthPixels + "*" + heightPixels + " 屏幕密度为(像素比例:0.75/1.0/1.5/2.0): " + density + " 屏幕密度DPI(每寸像素:120/...

    Android多分辨率多密度下UI适配方案

    Android支持ldpi(低密度)、mdpi(中密度)、hdpi(高密度)、xhdpi(超高密度)、xxhdpi(双倍超高密度)等不同的资源目录,开发者可以为每个密度提供相应的图片资源。系统会根据设备的像素密度自动选择最合适的...

    获取手机屏幕大小和密度DOME

    在Android开发中,理解和适配各种手机屏幕的大小和密度是非常关键的一环,因为不同的设备有着不同的屏幕参数,这直接影响到应用的显示效果和用户体验。本文将深入探讨如何获取手机屏幕的大小和密度,并以此为基础...

    Android多分辨率多密度下UI适配方案.

    同时,也可以添加 screen density 限定,例如,hdpi, ldpi, mdpi, xhdpi 等,以适应不同的屏幕密度。 在实际开发过程中,屏幕尺寸不够直观,Android 将其转换为分辨率表示,根据屏幕具体分辨率可选择相应的限定符。...

    UI——dp、dip、px、dpi、density概念及关系

    Android 中有多种屏幕密度,包括 ldpi、mdpi、hdpi 等,每种密度对应着不同的屏幕分辨率和密度值。 * ldpi:density=120 * mdpi:density=160 * hdpi:density=240 获得设备的屏幕分辨率和屏幕密度 可以使用以下...

    Android像素转换dp转px或相反

    Android设备屏幕的分辨率和物理尺寸各异,为了确保应用界面在不同设备上呈现一致的效果,引入了密度无关像素(Density-independent Pixel, dp)的概念。1dp在不同密度的屏幕上代表相同的物理尺寸。Android定义了四种...

    Android-选择分辨率并自动生成对应的dimen.xml文件

    - **使用比例单位(dp和sp)**:dp(density-independent pixels)用于尺寸,sp(scale-independent pixels)用于字体大小,这两个单位会根据设备的像素密度进行自动缩放。 - **使用Android Studio的预览功能**:...

    Android-androidUI适配屏幕适配

    同时,Android也根据像素密度(DPI)将屏幕分为低密度(ldpi)、中密度(mdpi)、高密度(hdpi)、超高密度(xhdpi)和超超高密度(xxhdpi)等类别。开发者需要为不同的尺寸和密度提供相应的资源文件,以确保在不同...

    android dx和dp 像素和dp之间转换的工具类

    Android系统根据屏幕的像素密度将其分为几个等级:低密度(ldpi)、中密度(mdpi)、高密度(hdpi)、超高清密度(xhdpi)、超高密度(xxhdpi)和超高超高密度(xxxhdpi)。每个密度级别都有一个对应的基准像素密度...

    Android高级应用源码-计算自己手机的屏幕宽高,density值,px 宽高,dp 的宽高,及px 和dp互转的科普.zip

    在Android中,dp(density-independent pixels)是一种与设备密度无关的度量单位,用于保持UI元素在不同分辨率的屏幕上的一致性。px 到 dp 的转换公式为: `dpValue = pxValue / density` 反之,dp 到 px 的转换...

    android 获取屏幕硬件分辨率方法

    `dm.density`是一个浮点数,表示屏幕的密度因子,它通常基于160dpi(每英寸160个像素,也称为MDPI或中等密度)的标准。例如,如果屏幕的实际像素宽度是480,而设备的密度是1.5(即HDPI),那么`dm.widthPixels`会...

    Density.zip

    "Density.zip"这个压缩包提供了一种解决方案,帮助开发者动态地修改应用的density属性,以便根据UI设计文档直接编写界面,避免手动计算dp(密度无关像素)与px(像素)的转换关系。 首先,我们需要理解Android中的...

    Android设备中获取屏幕相关参数

    Android定义了四种基本的DPI类别:低密度(LDPI)、中密度(MDPI)、高密度(HDPI)和超高清密度(XHDPI)。不同的DPI值会影响同一尺寸物体在屏幕上的大小。例如,1dp在MDPI屏幕上对应1px,而在HDPI屏幕上对应1.5px...

    安卓UI布局相关-计算自己手机的屏幕宽高density值px宽高dp的宽高及px和dp互转的科普.rar

    这篇资料主要关注的是如何获取和理解设备屏幕的相关属性,包括屏幕的宽度和高度,以及与像素密度(density)相关的px(像素)和dp(密度独立像素)单位之间的转换。这对于创建适应不同屏幕尺寸和密度的应用至关重要...

    android 4.0系统自带图标

    在"drawable-hdpi"这个文件夹中,我们看到的是针对高密度(High Density)屏幕的图标资源。Android系统将屏幕密度分为ldpi(低密度)、mdpi(中密度)、hdpi(高密度)、xhdpi(超高密度)和xxhdpi(超超高密度)等...

    Android模拟器全屏解决方案

    本文将详细探讨如何解决Android模拟器全屏的问题,并解释有关屏幕分辨率、密度与图片适配的重要知识点。 首先,全屏显示可以通过两种方法实现:在代码中设置或在AndroidManifest.xml配置文件中设置。以下是在代码中...

Global site tag (gtag.js) - Google Analytics