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);

}

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐