android常用系统bar高度
16lz
2021-01-26
package com.zhangteng.myapplication;import android.app.Activity;import android.content.Context;import android.content.res.Resources;import android.content.res.TypedArray;import android.graphics.Point;import android.graphics.Rect;import android.os.Build;import android.util.DisplayMetrics;import android.view.Display;import android.view.KeyCharacterMap;import android.view.KeyEvent;import android.view.ViewConfiguration;import android.view.Window;import android.view.WindowManager;/** * Created by Lanxumit on 2017/9/25. */public class SystemUtil { /** * 可以在NavigationBar的屏幕上准确的计算到屏幕的宽高 */ public static int getRealWidth(Context context) { WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay(); int screenWidth = 0; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { DisplayMetrics dm = new DisplayMetrics(); display.getRealMetrics(dm); screenWidth = dm.widthPixels; //或者也可以使用getRealSize方法// Point size = new Point();// display.getRealSize(size);// screenWidth = size.x; } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { try { screenWidth = (Integer) Display.class.getMethod("getRawWidth").invoke(display); } catch (Exception e) { DisplayMetrics dm = new DisplayMetrics(); display.getMetrics(dm); screenWidth = dm.widthPixels; } } return screenWidth; } public static int getRealHeight(Context context) { WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay(); int screenHeight = 0; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { DisplayMetrics dm = new DisplayMetrics(); display.getRealMetrics(dm); screenHeight = dm.heightPixels; //或者也可以使用getRealSize方法// Point size = new Point();// display.getRealSize(size);// screenHeight = size.y; } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { try { screenHeight = (Integer) Display.class.getMethod("getRawHeight").invoke(display); } catch (Exception e) { DisplayMetrics dm = new DisplayMetrics(); display.getMetrics(dm); screenHeight = dm.heightPixels; } } return screenHeight; } /** * 其高度可以通过读取定义在Android系统尺寸资源中的status_bar_height获得,所以不管当前Activity有没有隐藏StatusBar,获得的结果都是一样的。 * @param context * @return */ public static int getStatusBarHeight(Context context) { int statusBarHeight = -1; Resources resources = context.getResources(); int resourceId = resources.getIdentifier("status_bar_height", "dimen","android"); if (resourceId > 0) { statusBarHeight = resources.getDimensionPixelSize(resourceId); } return statusBarHeight; } /** * 虚拟按键(NavigationBar)是部分Android手机屏幕底部用以取代物理按键的区域,可隐藏。其高度可以通过读取定义在Android系统尺寸资源中的navigation_bar_height获得,所以不管当前Activity有没有隐藏NavigationBar,获得的结果都是一样的。 * @param context * @return */ public static int getNavigationBarHeight(Context context) { int navigationBarHeight = -1; Resources resources = context.getResources(); int resourceId = resources.getIdentifier("navigation_bar_height","dimen", "android"); if (resourceId > 0) { navigationBarHeight = resources.getDimensionPixelSize(resourceId); } return navigationBarHeight; } /** * 判断NavigationBar是否显示 * @param context * @return */ public static boolean isNavigationBarShow(Context context) { WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { Display display = wm.getDefaultDisplay(); Point size = new Point(); Point realSize = new Point(); display.getSize(size); display.getRealSize(realSize); return realSize.y != size.y; } else { boolean menu = ViewConfiguration.get(context).hasPermanentMenuKey(); boolean back = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK); if (menu || back) { return false; } else { return true; } } } /** * ActionBar就是在带有ActionBar的Theme中StatusBar下方、Activity顶部的类似于标题栏的区域。其高度可以通过读取定义在Android系统属性资源中的actionBarSize获得,所以不管当前Activity有没有使用ActionBar,获得的结果都是一样的。 * @param context * @return */ public static float getActoinBarHeight(Context context) { TypedArray actionbarSizeTypedArray = context.obtainStyledAttributes(new int[] { android.R.attr.actionBarSize }); return actionbarSizeTypedArray.getDimension(0, 0); } /** * ContentView就是我们为Activity设计的layout布局然后通过setContentView添加到Window上的那个View了。该方法推荐在onWindowFocusChanged()中执行,在onCreate()等方法中执行会返回0。 * @param activity * @return */ public static int getContentViewHeight(Activity activity) { Rect rectangle= new Rect(); activity.getWindow().findViewById(Window.ID_ANDROID_CONTENT).getDrawingRect(rectangle); return rectangle.height(); } /** * 程序能显示(或者说可见)的区域。返回结果受StatusBar、NavigationBar和软键盘等显示/消失的状态影响。当Activity隐藏了StatusBar、NavigationBar和软键盘处于全屏状态时,这个区域的大小就是屏幕的大小,即使Activity的Theme是Theme.Dialog之类。该方法推荐在onWindowFocusChanged()中执行,在onCreate()等方法中执行会返回0。 * @param activity * @return */ public static int getWindowVisibleDisplayHeight(Activity activity) { Rect rectangle= new Rect(); activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rectangle); return rectangle.height(); }}
更多相关文章
- Android拍照,读取相册
- ExpandableListView 使用方法
- android三种监听方法
- android 编译错误解决方法(一)
- Android(安卓)基于surfaceView绘制正弦曲线
- Android一种欢迎界面全屏显示方法
- Android(安卓)滑动验证的一种简单实现
- MPAndroidChart的具体属性方法
- Android(安卓)切屏