在開發(fā)中發(fā)現(xiàn)有些機型存在虛擬導航欄拣挪,會遮擋界面內(nèi)容,需要進行處理
在工具類中:
/** 判斷系統(tǒng)是否寫入了關于是否顯示虛擬導航欄的相關變量,如果為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());
}
}