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

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.500000
E/TAG: getDimensionPixelSize(): 32
E/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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值