1. 程式人生 > >android 虛擬鍵適配PopupWindow顯示位置

android 虛擬鍵適配PopupWindow顯示位置

先上圖:

這裡寫圖片描述

可以發現,虛擬鍵位,擋住了取消按鈕的觸控區域,網上百度一下,大多是在佈局內家加上(android:fitsSystemWindows=”true”) ,BUT我的控制元件不是佈局,裡面寫好的啊!我採用的自定義佈局,SO 問題就是如何讓取消按鈕的觸控區域顯示出來。

解決辦法:獲取虛擬鍵高度,然後定位顯示佈局的位置

public static Point getNavigationBarSize(Context context) {
    Point appUsableSize = getAppUsableScreenSize(context);
    Point realScreenSize = getRealScreenSize(context);

    // navigation bar on the right
if (appUsableSize.x < realScreenSize.x) { return new Point(realScreenSize.x - appUsableSize.x, appUsableSize.y); } // navigation bar at the bottom if (appUsableSize.y < realScreenSize.y) { return new Point(appUsableSize.x, realScreenSize.y - appUsableSize.y); } // navigation bar is not present
return new Point(); } public static Point getAppUsableScreenSize(Context context) { WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Display display = windowManager.getDefaultDisplay(); Point size = new Point(); display.getSize(size); return
size; } public static Point getRealScreenSize(Context context) { WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Display display = windowManager.getDefaultDisplay(); Point size = new Point(); if (Build.VERSION.SDK_INT >= 17) { display.getRealSize(size); } else if (Build.VERSION.SDK_INT >= 14) { try { size.x = (Integer) Display.class.getMethod("getRawWidth").invoke(display); size.y = (Integer) Display.class.getMethod("getRawHeight").invoke(display); } catch (IllegalAccessException e) {} catch (InvocationTargetException e) {} catch (NoSuchMethodException e) {} } return size; }

測試:虛擬鍵位正常顯示在佈局下面

這裡寫圖片描述