Android 屏幕显示
来源:互联网 发布:洗发水品牌排行榜知乎 编辑:程序博客网 时间:2024/05/21 10:28
Andriod之所以能够显示千变万化,绚丽多姿的界面,归根结底是由于数百万乃至更多的像素的组合排列。如果没有对像素单位有足够的了解,那么我们开发出来的程序很有可能只能在模拟器里面完美的运行了。。而在真机中的运行效果与我们想象的差异巨大。所以我们有必要在开始学习android的初识阶段,对像素的基本概念有足够的了解,这样在我们后面的开发中才能够做到得心应手。
Android设备支持的像素单位有:
1.px(像素):手机屏幕上显示的最小单位,这与物理设备的显示屏有关。一般来说,同样尺寸的屏幕,像素密度越高,呈现出的效果越清晰。
2.dp(dip) :与设备无关的显示单位,只和屏幕的尺寸有关。一般来说,以dp计量的屏幕的分辨率是相同的,无关这个手机的厂商,品牌,dp大小都是一样的。
3.sp(用来设置字体大小):手机在系统里可以调整显示的字体大小,设置普通字体的时候,用dp和sp设置出来的效果看起来是一样大小的。而当调整系统字体为大字体的时候,用dp设置的文字是没有变化的,而用sp设置的字体却变大了。所以,dp与系统设置的字体大小无关,而sp会随着系统字体的变化而变化。
上面这三个九十android开发中经常用到的几个。另外还有:in(英寸)、mm(毫米)、pt(磅,1/72英寸)
还值得一提的是,在android的xml布局文件中,为了让不同设备拥有统一的显示效果,除了用sp来设置文字大小以外,其余的一律用dp来进行设置。
而在代码中设置大小的单位都是以像素(px)为单位的。所以要想在代码中使用dp设置布局的大小或者间距的时候,需要把dp只转化为px值。
到这里我们要了解一个叫做DisplayMetrics的东西。这是一个关于屏幕显示信息的结构体.这里简单介绍一下它的常用属性
·widthPixels:以px为单位计量的宽度值
·heightPixels:以px为单位计量的高度值
·density:像素密度,即一个dp单位包含几个px单位
而我们需要在dp和px之间转化,那么我们必须要关心一下其中density字段,这个字段告诉我们该怎样进行转化。
当density=1.0的时候,表示一个dp值对应一个px值
当density=1.5的时候,表示2个dp值对应3个px值
当density=2.0的时候,表示一个dp值对应两个px值。。。可见其实两者之间的转化还是挺简单的,关键就在与density这个参数、
这里我给大家一个获取当前屏幕的宽度,高度,像素密度和两者转化的代码示例。
package com.easygoing.day1;import android.content.Context;import android.util.DisplayMetrics;import android.view.WindowManager;/** * Created by Lenovo on 2017/11/14. */public class DisplayMetricsUtil { public static int getScreenWith(Context context) { WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics metrics = new DisplayMetrics(); manager.getDefaultDisplay().getRealMetrics(metrics); return metrics.widthPixels; } public static int getScreenHeight(Context context) { WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics metrics = new DisplayMetrics(); manager.getDefaultDisplay().getRealMetrics(metrics); return metrics.heightPixels; } public static float getScreenDennsity(Context context) { WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics metrics = new DisplayMetrics(); manager.getDefaultDisplay().getRealMetrics(metrics); return metrics.density; } public static int dpToPixel(Context context,float dp_value) { return (int)(dp_value*getScreenDennsity(context)+0.5f); } public static int pixelToDp(Context context,float px_value) { return (int)(px_value/getScreenDennsity(context)+0.5f); }}
然后我在程序运行过程输出log:package com.easygoing.day1;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.widget.TextView;public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d("MainActivity", "DisplayMetricsUtil.getScreenWith(this):" + DisplayMetricsUtil.getScreenWith(this)); Log.d("MainActivity", "DisplayMetricsUtil.getScreenHeight(this):" + DisplayMetricsUtil.getScreenHeight(this)); Log.d("MainActivity", "DisplayMetricsUtil.getScreenDennsity(this):" + DisplayMetricsUtil.getScreenDennsity(this)); Log.d("MainActivity", "DisplayMetricsUtil.dpToPixel(this,18):" + DisplayMetricsUtil.dpToPixel(this, 18)); Log.d("MainActivity", "DisplayMetricsUtil.pixelToDp(this,100):" + DisplayMetricsUtil.pixelToDp(this, 100)); }}logcat输出:
11-14 15:09:17.069 8528-8528/? D/MainActivity: DisplayMetricsUtil.getScreenWith(this):108011-14 15:09:17.069 8528-8528/? D/MainActivity: DisplayMetricsUtil.getScreenHeight(this):192011-14 15:09:17.070 8528-8528/? D/MainActivity: DisplayMetricsUtil.getScreenDennsity(this):2.62511-14 15:09:17.070 8528-8528/? D/MainActivity: DisplayMetricsUtil.dpToPixel(this,18):4711-14 15:09:17.070 8528-8528/? D/MainActivity: DisplayMetricsUtil.pixelToDp(this,100):38
还有大家可能会看到有些资料里介绍会使用getDefaultDisplay().getMetrics(metrics)方法来获取屏幕的值,不过大家用过可能会发现,通过这个方法获取到的高度会比实际的分辨率高小,所以这里还是建议大家使用getRealMetrics方法。
- android屏幕显示设置
- android UI-屏幕显示
- Android 屏幕显示
- android改变屏幕显示方向
- android改变屏幕显示方向
- android改变屏幕显示方向
- Android 基础知识 - Intent & 屏幕显示
- android屏幕显示相关设置
- java/android屏幕显示程序
- 【Android】【显示】屏幕适配
- Android 获取屏幕显示信息
- android屏幕旋转显示流程
- android屏幕刷新显示机制
- Android 笔记之屏幕显示
- Android开发中如何固定屏幕显示!
- Android开发中如何固定屏幕显示!
- android屏幕和键盘显示问题
- android 屏幕显示设定为横向
- 通用方法 Java实现excel表格转成json
- C中标识符有哪些类型的作用域?
- python3中list.sort弃用cmp,key的用法
- 如何设置u盘写保护防止u盘拷贝文件
- TensorFlow学习笔记(三):TensorFlow实现逻辑回归模型
- Android 屏幕显示
- Linux命令之pwd
- Codeforces Round #445 (Div. 2) D
- java spring-webflux netty
- HDOJ2096 小明A+B
- 表单验证
- Lex词法分析器
- 分享自己使用python+pyserial+pyQT5写的串口调试助手
- 大整数乘法-LintCode