getDimension()、getDimensionPixelSize()和getDimensionPixelSize()的区别

来源:互联网 发布:国家开放大学网络教育 编辑:程序博客网 时间:2024/05/21 09:46

getDimension()、getDimensionPixelSize()和getDimensionPixelSize()这三个方法都是获取资源文件dimens.xml中的资源的。

今天来看看他们三者之前的区别。

1. 先看我的dimens.xml中资源的定义:

<dimen name="default_size">21dp</dimen>

2. MainActivity.java中获取资源并且将其打印:

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        float dimension = getResources().getDimension(R.dimen.default_size);        Log.e("TAG",String.format("getDimension(): %f", dimension) );        int dimesionPixelSize = getResources().getDimensionPixelSize(R.dimen.default_size);        Log.e("TAG",String.format("getDimensionPixelSize(): %d", dimesionPixelSize));        int pixelOffset = getResources().getDimensionPixelOffset(R.dimen.default_size);        Log.e("TAG",String.format("getDimensionPixelOffset(): %d", pixelOffset));        //获得屏幕的宽度和高度        DisplayMetrics metric = new DisplayMetrics();        getWindowManager().getDefaultDisplay().getMetrics(metric);        int width = metric.widthPixels;     // 屏幕宽度(像素)        int height = metric.heightPixels;   // 屏幕高度(像素)        float density = metric.density;      // 屏幕密度(0.75 / 1.0 / 1.5)        int densityDpi = metric.densityDpi;  // 屏幕密度DPI(120 / 160 / 240)        Log.e("TAG","width:" + width + " height:" + height + " density:" + density + " densityDpi:" + densityDpi);    }}


3. 我们来看log打印的结果

E/TAG: getDimension(): 31.500000E/TAG: getDimensionPixelSize(): 32E/TAG: getDimensionPixelOffset(): 31
E/TAG: width:480 height:800 density:1.5 densityDpi:240

从最后提条打印的结果可知,我的模拟器的分辨率是 480*800的,屏幕密度是1.5 ,DPI是240。

从打印结果就可以知道, getDimension()、getDimensionPixelSize()和getDeimensionPixelOffset()

三个方法都是将资源dimens.xml中的资源乘以屏幕密度,即 21 * 1.5 = 31.5,只是getDimens()返回的

是float,其余两个方法返回的是int类型的值。其中getDimensionPixelSize()方法返回的实际数值是

四舍五入的,而getDimensionPixelOffset返回的实际数值是去掉结果后面的小数点。




0 0
原创粉丝点击