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.0
Log.e("dens","density is  "+density);

//获取屏幕像素密度
int densityDpi = display.densityDpi;
//输出结果是 160
Log.e("dens","densityDpi is  "+densityDpi);


//获取屏幕的高度 结果单位 px
int heightPixels = display.heightPixels;
//输出结果是 heightPixels is  480
Log.e("dens","heightPixels is  "+heightPixels);


//获取屏幕的宽度 结果单位 px
int widthPixels = display.widthPixels;
//输出结果是 widthPixels is  320
Log.e("dens","widthPixels is  "+widthPixels);


//获取缩放比例
float scaledDensity = display.scaledDensity;
//输出结果是 scaledDensity is  1.0
Log.e("dens","scaledDensity is  "+scaledDensity);

float xdpi = display.xdpi;
float ydpi = display.ydpi;

//输出结果是 xdpi is  160.0  ydpi 160.0
Log.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

//获取TextView
TextView mTvMainShow = (TextView) findViewById(R.id.tv_main_show);

//获取TextView对应的LayoutParams
LayoutParams layoutParams = mTvMainShow.getLayoutParams();

if (layoutParams != null) {
    //设置宽度为360px
    layoutParams.width = 360;
}

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


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

//获取TextView
TextView mTvMainShow = (TextView) findViewById(R.id.tv_main_show);

//获取TextView对应的LayoutParams
LayoutParams 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;

//获取TextView
TextView mTvMainShow = (TextView) findViewById(R.id.tv_main_show);

//获取TextView对应的LayoutParams
LayoutParams layoutParams = mTvMainShow.getLayoutParams();

if (layoutParams != null) {

    layoutParams.width = (int) (120 * scaledDensity);
}


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

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

早起的年轻人 CSDN认证博客专家 移动开发 项目管理 Java
只要用心去做,每一件事情还是有可能成功的,当然成功是没有界限的,只不过是达到自己心里的那个目标,公众号:我的大前端生涯,一个爱喝茶的程序员,通常会搞搞SpringBoot 、Herbinate、Mybatiys、Android、iOS、Flutter、Vue、小程序等.
©️2020 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页