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);
}
}
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返回的实际数值是去掉结果后面的小数点。