Android屏幕分辨率的问题,dp,px,density等概念
来源:互联网 发布:淘宝卖家衣服轮播图 编辑:程序博客网 时间:2024/06/08 00:38
PX是Pixel的缩写,若把影像放大数倍,会发现这些连续色调其实是由许多色彩相近的小方点所组成,这些小方点就是构成影像的最小单位“像素”。这种最小的图形的单元能在屏幕上显示通常是单个的染色点。
density表示每英寸有多少个显示点,与分辨率是两个不同的概念。
分辨率可以从显示分辨率与图像分辨率两个方向来分类。
显示分辨率(屏幕分辨率)是屏幕图像的精密度,是指显示器所能显示的像素有多少。
描述分辨率的单位有:(dpi点每英寸)、lpi(线每英寸)和ppi(像素每英寸)。但只有lpi是描述光学分辨率的尺度的。虽然dpi和ppi也属于分辨率范畴内的单位,但是他们的含义与lpi不同。而且lpi与dpi无法换算,只能凭经验估算。
常见分辨率如下:
显示器
标屏 分辨率 宽屏 分辨率
QVGA 320×240 WQVGA 400×240
VGA 640×480 WVGA 800×480
SVGA 800×600 WSVGA 1024×600
XGA 1024×768 WXGA 1280×720/1280×768/1280×800
XGA+ 1152×864 WXGA+ 1366×768
SXGA 1280×1024/1280×960 WSXGA 1440×900
SXGA+ 1400×1050 WSXGA+ 1680×1050
UXGA 1600×1200 WUXGA 1920×1200
QXGA 2048×1536 WQXGA 2560×1600
dip(dp): device independent pixels(设备独立像素)
dip,就是把屏幕的高分成480分,宽分成320分。比如你做一条160dip的横线,无论你在320还480的模拟器上,都是一半屏的长度。
dpi: DPI是Dots Per Inch(每英寸所打印的点数)的缩写,
sp: scaled pixels(放大像素)。主要用于字体显示best for textsize。与字体大小设置有关系
dp与px换算公式:
pixs =dips * (densityDpi/160).
dips=(pixs*160)/densityDpi
但是我们在代码里面进行转化的时候还需要有一个偏移值:0.5f
apk的资源包中
当屏幕density=240时,使用hdpi 标签的资源
当屏幕density=160时,使用mdpi标签的资源
当屏幕density=120时,使用ldpi标签的资源
当屏幕density=320时,使用xhdpi标签的资源
当屏幕density=480时,使用xxhdpi标签的资源
不加任何标签的资源是各种分辨率情况下共用的
获得系统分辨率
Andorid.util 包下的DisplayMetrics 类提供了一种关于显示的通用信息,如显示大小,分辨率和字体。
获得屏幕分辨率代码如下:
MainActivity.java内容如下:
package com.linutest.exa1;
import android.app.Activity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
private Button bt_btn;
TextView mTextView1 = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView1= (TextView) findViewById(R.id.tv_5);
bt_btn = (Button) findViewById(R.id.bt_btns);
bt_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
DisplayMetrics metrics=new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int W = metrics.widthPixels;
int H = metrics.heightPixels;
Log.i("Main", "Width = " + W);
Log.i("Main", "Height = " + H);
mTextView1.setText("Width = " + W +"Height = " + H);
}
});
}
}
=============================================================
布局文件activity_main.xml内容如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:id="@+id/bt_btns"
android:layout_width="130dp"
android:layout_height="40dp"
android:gravity="center"
android:background="#ff0000"
android:text="点击按钮"
/>
<EditText
android:id="@+id/tv_5"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginTop="5dp"
android:hint="分辨率为:" />
</LinearLayout >
运行效果:
模拟器图片
小米4c真机运行效果如下:
控件尺寸函数:
看看API reference里的解释:
- getDimension()是基于当前DisplayMetrics进行转换,获取指定资源id对应的尺寸。文档里并没说这里返回的就是像素,要注意这个函数的返回值是float,像素肯定是int。
- getDimensionPixelSize()与getDimension()功能类似,不同的是将结果转换为int,并且小数部分四舍五入。
- getDimensionPixelOffset()与getDimension()功能类似,不同的是将结果转换为int,并且偏移转换(offset conversion,函数命名中的offset是这个意思)是直接截断小数位,即取整(其实就是把float强制转化为int,注意不是四舍五入哦)。
可见getDimension和getDimensionPixelOffset的功能差不多,都是获取某个dimen的值,如果是dp或sp的单位,将其乘以density,如果是px,则不乘;两个函数的区别是一个返回float,一个返回int.
getDimensionPixelSize则不管写的是dp还是sp还是px,都会乘以denstiy.
- Android屏幕分辨率的问题,dp,px,density等概念
- Android屏幕density, dip ,px ,密度,分辨率等相关概念
- android关于屏幕画图的一些度量单位及概念(sp,dp,px,dpi,density)
- Android: density,dp,sp,px
- Android px/dp/sp scaledDensity/density 详解
- Android深入理解dp,px,以及density。
- 全面理解Android中的Px,DPI,DIP,Density,Sp等概念
- Android“一万种”获取屏幕分辨率的方法以及px、dp转换
- android屏幕分辨率 density值
- android ui的几个概念:px,dip(dp),sp,dpi,分辨率等
- android ui的几个概念:px,dip(dp),sp,dpi,分辨率等
- android ui的几个概念:px,dip(dp),sp,dpi,分辨率等
- android ui的几个概念:px,dip(dp),sp,dpi,分辨率等
- android ui的几个概念:px,dip(dp),sp,dpi,分辨率等
- android ui的几个概念:px,dip(dp),sp,dpi,分辨率等
- android ui的几个概念:px,dip(dp),sp,dpi,分辨率等
- android ui的几个概念:px,dip(dp),sp,dpi,分辨率等
- android UI的几个概念:px,dip(dp),sp,dpi,分辨率等
- kindeditor上传图片时候,上传成功了,但是页面上却提示失败
- 美国罗斯福纪念公园墙上刻着的一段总统名言
- android 自动更新APP版本,并使用ProgressDialog显示进度
- 新建target后info.plist的路径关联指向问题
- 搜索算法基础之Oil Deposits
- Android屏幕分辨率的问题,dp,px,density等概念
- android-Selector控件点击效果设置
- printf中几个不常用的格式说明
- 判断ios中是否安装了某些软件
- 双向链表的操作
- Android Fragments 详细使用
- 解决新版本Chrome无法显示border-image问题
- JNI接口函数 (1)
- 哈哈...忽然就有了动力