700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Android 屏幕适配攻略(四)获取手机屏幕的相关信息 与动态设置控件的大小

Android 屏幕适配攻略(四)获取手机屏幕的相关信息 与动态设置控件的大小

时间:2023-03-03 02:43:10

相关推荐

Android 屏幕适配攻略(四)获取手机屏幕的相关信息 与动态设置控件的大小

Android 屏幕适配攻略(四)获取手机屏幕的相关信息 与动态设置控件的大小

1 动态获取手机屏幕的 屏幕密度与对应像素比例

例如在 320 * 480 尺寸为 3.2 英寸的手机 ,对应的像素密度应该为 160dpi 对应的像素比例应该是 1.0也就是 1dp = 1sp = 1px

DisplayMetrics display = new DisplayMetrics();//将当前窗口的一些信息放在DisplayMetrics类中,this.getWindowManager().getDefaultDisplay().getMetrics(display);float density = display.density;//输出结果是 dens: density is 1.0Log.e("dens","density is "+density);//获取屏幕像素密度int densityDpi = display.densityDpi;//输出结果是 160Log.e("dens","densityDpi is "+densityDpi);//获取屏幕的高度 结果单位 pxint heightPixels = display.heightPixels;//输出结果是 heightPixels is 480Log.e("dens","heightPixels is "+heightPixels);//获取屏幕的宽度 结果单位 pxint widthPixels = display.widthPixels;//输出结果是 widthPixels is 320Log.e("dens","widthPixels is "+widthPixels);//获取缩放比例float scaledDensity = display.scaledDensity;//输出结果是 scaledDensity is 1.0Log.e("dens","scaledDensity is "+scaledDensity);float xdpi = display.xdpi;float ydpi = display.ydpi;//输出结果是 xdpi is 160.0 ydpi 160.0Log.e("dens","xdpi is "+xdpi+" ydpi "+ydpi);

2 动态设置控件的大小

例如在 720 * 1280 尺寸为 4.7 英寸的手机 ,对应的像素密度应该为 320dpi 对应的像素比例应该是 2.0也就是 1dp = 1sp = 2px

2.1 默认状态下的适配显示

在屏幕上设置显示一个TextView ,在布局文件中设置它的宽度为 100dp ,按照比例缩放规则,其显示在上述屏幕上的宽度应当为 200px

<TextView android:layout_width = "100dp"android:layout_height = "44dp"android:background = "#294881" />

2.2 动态设置为指定的宽度(单位为像素)

其实要实现这种效果,例如设置为指定的宽度 360 px就可,这里是书写java代码设置的方式

设置宽度为指定的像素单位,我们直接在java代码中写数字就可以,例如这里写的360,就代表在屏幕上显示的实际大小是360px

//获取TextViewTextView mTvMainShow = (TextView) findViewById(R.id.tv_main_show);//获取TextView对应的LayoutParamsLayoutParams layoutParams = mTvMainShow.getLayoutParams();if (layoutParams != null) {//设置宽度为360pxlayoutParams.width = 360;}

2.3 动态设置为指定的宽度(单位为 dp)

在java代码中 动态设置TextView的宽度为 120dp的长度,设置为dp,意味着要随着屏幕的宽度的变化而变化,如果直接写成下面的方式,那么无论在何种手机何种屏幕上显示的大小 都是120px,并非我们期待的效果

//获取TextViewTextView mTvMainShow = (TextView) findViewById(R.id.tv_main_show);//获取TextView对应的LayoutParamsLayoutParams layoutParams = mTvMainShow.getLayoutParams();if (layoutParams != null) {layoutParams.width = 120;}

正确的做法应当是

在java代码中 获取像素密度缩放比例,也就是获取当前的屏幕像素密度计算与 160的比例(安卓中以160dip为标准基数),然后再120与缩放比例的计算结果赋值结TextView

DisplayMetrics display = new DisplayMetrics();//将当前窗口的一些信息放在DisplayMetrics类中,this.getWindowManager().getDefaultDisplay().getMetrics(display);//获取缩放比例float scaledDensity = display.scaledDensity;//获取TextViewTextView mTvMainShow = (TextView) findViewById(R.id.tv_main_show);//获取TextView对应的LayoutParamsLayoutParams layoutParams = mTvMainShow.getLayoutParams();if (layoutParams != null) {layoutParams.width = (int) (120 * scaledDensity);}

在 720 * 1280 尺寸为 4.7 英寸的手机 ,对应的像素密度应该为 320dpi 对应的像素比例应该是 2.0也就是 1dp = 1sp = 2px

这里设置的为 120dp, 那么在这款手机屏幕上的显示的宽度应当是 240px

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。