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方法。
原创粉丝点击