zoukankan      html  css  js  c++  java
  • 获取Android屏幕尺寸、控件尺寸、状态栏/通知栏高度、导航栏高度

    1.获取Android屏幕尺寸

    我们能够通过getSize()方法获得屏幕的尺寸

    Display display = getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    int width = size.x;
    int height = size.y;

    假设不是在Activity里面。则无法使用getWindowManager()。此时能够使用WINDOW_SERVICE获得一个默认的Display

    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    Display display = wm.getDefaultDisplay();

    getSize()方法是在API 13 之后才增加的。在API 13之前我们须要这样做

    Display display = getWindowManager().getDefaultDisplay(); 
    int width = display.getWidth();  // 已经过时
    int height = display.getHeight();  // 已经过时

    为了适配全部的设备。我们应该这样写

     if (android.os.Build.VERSION.SDK_INT >= 13) {
                display = getWindowManager().getDefaultDisplay();
                Point size = new Point();
                display.getSize(size);
                width = size.x;
                height = size.y;
            }else {
                display = getWindowManager().getDefaultDisplay();
                width = display.getWidth();
                height = display.getHeight();
            }
    

    还有第二种方法,这样的方法也能够正确得到屏幕尺寸

      DisplayMetrics metrics = new DisplayMetrics();
      getWindowManager().getDefaultDisplay().getMetrics(metrics);
      width = metrics.widthPixels;
      height = metrics.heightPixels;

    更简便的写法

     width = getResources().getDisplayMetrics().heightPixels;
     height = getResources().getDisplayMetrics().widthPixels;

    以上获得的屏幕高度都是包含了状态栏和导航栏的高度的
    这里写图片描写叙述

    2.获取控件尺寸

    假设我们在onCreate()方法里直接调用getWidth()、getMeasuredWidth()获得的尺寸为0。这是因为在onCreate()中,我们的控件还没有画好。等onCreate()运行完了,我们的控件才被測量出来,我们能够注冊一个监听器,用来监听測量结果

    ViewTreeObserver vto  = mButton.getViewTreeObserver();
            vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    
                @Override
                public void onGlobalLayout() {
                //移除上一次监听。避免反复监听
                    mButton.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                    //在这里调用getHeight()获得控件的高度
                    buttonHeight = mButton.getHeight();
                }
            });

    3.获得状态栏/通知栏的高度

     public static int getStatusBarHeight(Context context){
            Class<?> c = null;
            Object obj = null;
            Field field = null;
            int x = 0, statusBarHeight = 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());
                statusBarHeight = context.getResources().getDimensionPixelSize(x);
            } catch (Exception e1) {
                e1.printStackTrace();
            }
            return statusBarHeight;
        }

    4.获得导航栏高度

     public int getNavigationBarHeight(Activity activity) {
            Resources resources = activity.getResources();
            int resourceId = resources.getIdentifier("navigation_bar_height","dimen", "android");
            //获取NavigationBar的高度
            int height = resources.getDimensionPixelSize(resourceId);
            return height;
        }

    5.去除导航栏

    在onCraete()方法中的setContentView();的之前调用以下这句代码

     requestWindowFeature(Window.FEATURE_NO_TITLE);

    6.去除状态栏/通知栏

    在onCraete()方法中的setContentView()。的之前调用以下这句代码

    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN
    ,WindowManager.LayoutParams.FLAG_FULLSCREEN);
  • 相关阅读:
    HTML常用标记(完整版)
    理论精讲-教育知识与能力7-第四章 中学生学习心理
    前端面试题总结
    for-in 和for-of循环的区别
    Nginx部署多个vue前端项目
    vue项目PC端如何适配不同分辨率屏幕
    基于Vue的项目打包为移动端app
    js中Date对象
    React Router的Route的使用
    js中数组的sort() 方法
  • 原文地址:https://www.cnblogs.com/lytwajue/p/7217402.html
Copyright © 2011-2022 走看看