布局适配的问题解决

来源:互联网 发布:淘宝如何找人工客服 编辑:程序博客网 时间:2024/06/08 02:16

问题:布局由于虚拟按键导致导航栏顶上去的解决办法


首先写一个工具类:

public class AndroidWorkaround {    public static void assistActivity(View content) {        new AndroidWorkaround(content);    }    private View mChildOfContent;    private int usableHeightPrevious;    private ViewGroup.LayoutParams frameLayoutParams;    private AndroidWorkaround(View content) {        mChildOfContent = content;        mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {            public void onGlobalLayout() {                possiblyResizeChildOfContent();            }        });        frameLayoutParams = mChildOfContent.getLayoutParams();    }    private void possiblyResizeChildOfContent() {        int usableHeightNow = computeUsableHeight();        if (usableHeightNow != usableHeightPrevious) {            frameLayoutParams.height = usableHeightNow;            mChildOfContent.requestLayout();            usableHeightPrevious = usableHeightNow;        }    }    private int computeUsableHeight() {        Rect r = new Rect();        mChildOfContent.getWindowVisibleDisplayFrame(r);        return (r.bottom);    }    public static boolean checkDeviceHasNavigationBar(Context context) {        boolean hasNavigationBar = false;        Resources rs = context.getResources();        int id = rs.getIdentifier("config_showNavigationBar", "bool", "android");        if (id > 0) {            hasNavigationBar = rs.getBoolean(id);        }        try {            Class systemPropertiesClass = Class.forName("android.os.SystemProperties");            Method m = systemPropertiesClass.getMethod("get", String.class);            String navBarOverride = (String) m.invoke(systemPropertiesClass, "qemu.hw.mainkeys");            if ("1".equals(navBarOverride)) {                hasNavigationBar = false;            } else if ("0".equals(navBarOverride)) {                hasNavigationBar = true;            }        } catch (Exception e) {        }        return hasNavigationBar;    }}
然后在需要调用的activity的onCreate()方法中调用

if (AndroidWorkaround.checkDeviceHasNavigationBar(this)) {    AndroidWorkaround.assistActivity(findViewById(android.R.id.content));}

阅读全文
0 0
原创粉丝点击