android 底部虚拟导航栏适配问题

public class NavigationBar {
    /**
     * 判断底部导航栏是否显示
     *
     * @param act
     * @return
     */
    public static boolean isNavigationBarShow(Activity act) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            Display display = act.getWindowManager().getDefaultDisplay();
            Point size = new Point();
            Point realSize = new Point();
            display.getSize(size);
            display.getRealSize(realSize);
            return realSize.y != size.y;
        } else {
            boolean menu = ViewConfiguration.get(act).hasPermanentMenuKey();
            boolean back = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK);
            if (menu || back) {
                return false;
            } else {
                return true;
            }
        }
    }
    /**
     * 如果有底部导航栏 获取底部导航栏高度
     * @param context
     * @return
     */
    public static int getBottomNavigatorHeight(Context context) {
        int rid = context.getResources().getIdentifier("config_showNavigationBar", "bool", "android");
        if (0 != rid) {
            int resourceId = context.getResources().getIdentifier("navigation_bar_height", "dimen", "android");
            return context.getResources().getDimensionPixelSize(resourceId);
        }
        return 0;
    }
}

用法:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    TextView textView=findViewById(R.id.tv_height);
    RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) textView.getLayoutParams();
    //判断是否有底部导航栏
    NavigationBar navigationBar=new NavigationBar();
    if (isNavigationBarShow(MainActivity.this)){//判断底部导航栏是否 显示
        textView.setText("高度是:"+getBottomNavigatorHeight(MainActivity.this));
        layoutParams.bottomMargin=getBottomNavigatorHeight(MainActivity.this);
    }else {
        layoutParams.bottomMargin=0;//将默认的距离底部改为0
    }
    textView.setLayoutParams(layoutParams);
}
 

你可能感兴趣的:(移动开发)