package com.example.administrator.searchpicturetool.widght.fitsystemwindowlayout; import android.content.Context; import android.os.Build; import android.util.DisplayMetrics; import android.util.Log; import android.view.Display; import android.view.KeyCharacterMap; import android.view.KeyEvent; import android.view.View; import android.view.ViewConfiguration; import android.view.WindowManager; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * Created by Mr.Jude on 2015/12/24. */ public class Utils { public static final String TAG = "FitSystemBar"; public static boolean DEBUG = false; /** * 取导航栏高度 * @return */ public static int getNavigationBarHeight(Context ctx) { int result = 0; int resourceId = ctx.getResources().getIdentifier("navigation_bar_height", "dimen", "android"); if (resourceId > 0) { result = ctx.getResources().getDimensionPixelSize(resourceId); } return result; } /** * 取状态栏高度 * @return */ public static int getStatusBarHeight(Context ctx) { int result = 0; int resourceId = ctx.getResources().getIdentifier("status_bar_height", "dimen", "android"); if (resourceId > 0) { result = ctx.getResources().getDimensionPixelSize(resourceId); } return result; } public static boolean hasSoftKeys(Context ctx){ boolean hasSoftwareKeys; WindowManager manager = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE); if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.JELLY_BEAN_MR1){ Display d = manager.getDefaultDisplay(); DisplayMetrics realDisplayMetrics = new DisplayMetrics(); d.getRealMetrics(realDisplayMetrics); int realHeight = realDisplayMetrics.heightPixels; int realWidth = realDisplayMetrics.widthPixels; DisplayMetrics displayMetrics = new DisplayMetrics(); d.getMetrics(displayMetrics); int displayHeight = displayMetrics.heightPixels; int displayWidth = displayMetrics.widthPixels; hasSoftwareKeys = (realWidth - displayWidth) > 0 || (realHeight - displayHeight) > 0; }else{ boolean hasMenuKey = ViewConfiguration.get(ctx).hasPermanentMenuKey(); boolean hasBackKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK); hasSoftwareKeys = !hasMenuKey && !hasBackKey; } return hasSoftwareKeys; } public static void log(String text){ if (DEBUG) Log.i(TAG,text); } public static void paddingToNavigationBar(View view){ if (!hasSoftKeys(view.getContext())||!(Build.VERSION.SDK_INT>=Build.VERSION_CODES.KITKAT))return; Method method = null; try { method = view.getClass().getMethod("setClipToPadding", boolean.class); } catch (NoSuchMethodException e) { return; } try { method.invoke(view,false); view.setPadding(0,0,0,getNavigationBarHeight(view.getContext())); } catch (IllegalAccessException e) { return; } catch (InvocationTargetException e) { return; } } }