Android虚拟按键的适配
华为等手机底部带有虚拟按键,会遮挡app的底部,针对这个问题网上有一些解决方案,但都不是很完美,或多或少存在一些问题。
下面推荐一个比较完美的适配方式。
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的setContentView后调用即可
setContentView(R.layout.activity_main);
//适配虚拟按键
if (AndroidWorkaround.checkDeviceHasNavigationBar(this)) {
AndroidWorkaround.assistActivity(findViewById(android.R.id.content));
}
以上转载:https://blog.csdn.net/wuhongjie24/article/details/80987142的文章,自己项目中亲测有效,供各位码友参考。
更多相关文章
- Android(安卓)后台保活,这里有你需要的所有姿势。2019,最新版本。
- Android(安卓)App监听软键盘按键的方式与改变软键盘右下角确定键
- Android(安卓)按键式事件
- android TV盒子开发遥控器按键的监听
- android沉浸式状态栏和虚拟按键
- Android(安卓)沉浸式全屏(StatusBar,NavigationBar)
- Android简易计算器——LinearLayout布局
- android 判断是否连接钢琴和检测钢琴是哪个按键
- 触摸按键Android的驱动解析