1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 解决华为手机虚拟按键遮挡页面底部tab栏的问题

解决华为手机虚拟按键遮挡页面底部tab栏的问题

时间:2022-09-04 23:43:03

相关推荐

解决华为手机虚拟按键遮挡页面底部tab栏的问题

谷歌原生,华为之类的虚拟按键遮挡页面底部RadioButton之类的问题。

if (AndroidWorkaround.checkDeviceHasNavigationBar(this)) { //适配华为手机虚拟键遮挡tab的问题AndroidWorkaround.assistActivity(findViewById(android.R.id.content)); //需要在setContentView()方法后面执行}

需要我们自定义一个AndroidWorkaround类:

//防止虚拟建遮挡tabpublic 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;}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。