1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Android获取屏幕宽高 状态栏宽高 actionbar宽高 layout宽高 导航栏高度的方法汇总

Android获取屏幕宽高 状态栏宽高 actionbar宽高 layout宽高 导航栏高度的方法汇总

时间:2024-03-21 23:37:20

相关推荐

Android获取屏幕宽高 状态栏宽高 actionbar宽高 layout宽高 导航栏高度的方法汇总

看这个博客你可以知道

获取屏幕宽高,状态栏宽高,actionbar宽高,layout宽高,导航栏(虚拟按键栏)高度的方法

目录顺序为

代码测试的机型

状态栏高度

actionbar高度

屏幕高度

导航栏(虚拟按键栏)高度

layout宽高

总结

代码测试的机型:小米8青春版

这里我们用的是小米8青春版手机测试(刘海屏)

小米8青春版屏幕px为1080*2280,相当于360*760dp

获取状态栏高度

//获取状态栏private int getStatusBarHeight() {Class<?> c = null;Object obj = null;Field field = null;int x = 0;try {c = Class.forName("com.android.internal.R$dimen");obj = c.newInstance();field = c.getField("status_bar_height");x = Integer.parseInt(field.get(obj).toString());return getResources().getDimensionPixelSize(x);} catch (Exception e1) {Log.d(TAG, "get status bar height fail");e1.printStackTrace();return 75;}}Log.i(TAG, "onCreate: "+getStatusBarHeight());

上面的是获取状态栏方法,获得状态栏的高度(px)

因为这里用的小米手机是刘海屏,状态栏为20dp,通常手机屏幕的状态栏高度为25dp

dp=60/3=20dp

Rect frame = new Rect();getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);int statusBarHeight = frame.top;Log.i(TAG, "onPause: "+statusBarHeight);

上面的是第二种获取状态栏高度的方法(px)

P.s.该方法写在onCreate()中不可以,会获取到0

dp=60/3=20dp

获取ActionBar高度

//第一种获取方法int actionBarHeight = getSupportActionBar().getHeight();//第二种获取方法int contentTop = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();

上面是两种获取Actionbar高度的方法(px)

dp=168/3=56dp

P.s.该方法写在onCreate()中不可以,会获取到0

获取屏幕宽高

int screenWidth,screenHeight;WindowManager windowManager = getWindowManager();Display display = windowManager.getDefaultDisplay();screenWidth = display.getWidth();screenHeight = display.getHeight();Log.i(TAG, "onCreate: "+screenWidth+","+screenHeight);DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);int screenWidth2 = dm.widthPixels;int screenHeight2 = dm.heightPixels;Log.i(TAG, "onCreate: "+screenWidth2+","+screenHeight2);

这是两种获取屏幕宽高的方法,单位为px

(获取到的屏幕为状态栏+actionbar+页面内容)

(不包含虚拟按键栏)

因为小米8青春版底部为虚拟按键栏,所以虚拟按键栏高度为2280-2150px=130px=43.3dp

获取虚拟按键栏高度(导航栏)

//获取虚拟按键栏高度public static int getNavigationBarHeight(Context context, boolean b) {int result = 0;//是否纯在虚拟按键栏(导航栏)if (b) {Resources res = context.getResources();int resourceId = res.getIdentifier("navigation_bar_height", "dimen", "android");if (resourceId > 0) {result = res.getDimensionPixelSize(resourceId);}}return result;}

上面是获取虚拟按键栏(导航栏)高度的方法(px)

dp=130px/3=43.3dp

获取控件宽高

LinearLayout linearLayout;linearLayout=findViewById(R.id.ll_layout);linearLayout.measure(0,0);Log.i(TAG,"onStop:"+linearLayout.getMeasuredHeight()+","+linearLayout.getMeasuredWidth());Log.i(TAG,"onStop:"+linearLayout.getLayoutParams().height+","+linearLayout.getLayoutParams().width);Log.i(TAG,"onStop:"+linearLayout.getHeight()+","+linearLayout.getWidth());

上面分为3种,第一种是获取组件测绘宽高,第二种是控件设置的宽高,第三种是控件实际显示的宽高

P.s.第一种获取的是子控件的测绘宽高

第二种设置match_parent时显示-1,设置wrap_content时显示-2

第三种方法在View没加载完成时,获取的值为0,所以写在onCreate中会获取到0(写在onStart和onResume第一次调用也为0,只是查看的话可以写在onStop中,这个时候View肯定加载完成)(可以设个监听器持续监听,直到View加载完成,宽高不为0为止)

高dp=1922px/3=640.7dp

宽dp=1080px/3=360dp

注意点:尽量别在oncreate中获取各类高度,因为在Android界面创建过程中,容易读取不到宽高,会出现0的情况

总结:小米8青春版手机界面高度:

状态栏(StatusBar) 60px=20dp

ActionBar(标题栏) 168px=56dp

页面内容 1922px=640.7dp

虚拟按钮栏(导航栏) 130px=43.3dp

共计2280px=760dp

___________________________________分割线______________________________________

再用我自己的华为P10 plus真机测试一下屏幕高度

自己平时用的华为P10 plus, 分辨率为1440*2560px,dp为360*640dp

状态栏(StatusBar) 24dp

ActionBar(标题栏) 56dp

页面内容 560dp

高度共计640dp

华为P10 plus没有虚拟按键栏,也不是刘海屏,所以和上面的小米手机有点区别

华为P10屏幕分辨率1440*2560px,测出来一直是1080*1920px,后来发现是华为手机的智能分辨率功能,可以调节为屏幕密度2,3,4三种对应的分辨率

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