处理虚拟导航栏遮挡界面问题
2024-05-07 本文已影响0人
电梯里漫舞
在开发中发现有些机型存在虚拟导航栏,会遮挡界面内容,需要进行处理
在工具类中:
/** 判断系统是否写入了关于是否显示虚拟导航栏的相关变量,如果为true,表示有虚拟导航栏 **/
public static boolean hasVirtualNavigationBar() {
int id = Resources.getSystem().getIdentifier("config_showNavigationBar", "bool", "android");
return id > 0 && Resources.getSystem().getBoolean(id);
}
/** 获取导航栏高度 **/
public static int getNavigationBarHeight() {
int navigationBarHeight = 0;
int resourceId = Resources.getSystem().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
navigationBarHeight = Resources.getSystem().getDimensionPixelSize(resourceId);
}
return navigationBarHeight;
}
在fragment中使用工具类:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
mainView = inflater.inflate(R.layout.fragment_menu_list, parent, false);
//...其它代码
fixNavigationBar(mainView);
return mainView;
}
private void fixNavigationBar(View rootLayout) {
if (hasVirtualNavigationBar()){
rootLayout.setPadding(rootLayout.getPaddingLeft(),
rootLayout.getPaddingTop(),
rootLayout.getPaddingRight(),
rootLayout.getPaddingBottom() + ScreenUtil.getNavigationBarHeight());
}
}