对于这样的布局,我们可以使用GridView控件或者RecyclerView控件来实现,推荐使用RecyclerView控件来实现。一个屏幕显示16个应用,需要和屏幕上的知识点联系起来。1.获取顶部状态栏高度/***获取顶部状态栏高度*/privateintgetStatusBarHeight(){Resourcesresources=mActivity.getResources();intresourceId=resources.getIdentifier("status_bar_height","dimen","android");intheight=resources.getDimensionPixelSize(resourceId);Log.v("dbw","Statusheight:"+height);returnheight;}2.获取底部导航栏高度privateintgetNavigationBarHeight(){Resourcesresources=mActivity.getResources();intresourceId=resources.getIdentifier("navigation_bar_height","dimen","android");inheight=resources.getDimensionPixelSize(resourceId);Log.v("dbw","Naviheight:"+height);returnheight;}这里为底部,我们得花点心思,华为手机自带下方导航。我们需要通过判断设备是否有返回键和菜单键(不是虚拟键,是手机屏幕外的键)来判断是否有导航栏(已经验证可行)。主要是KeyEvent.KEYCODE_BACK和hasPermanentMenuKey@SuppressLint("NewApi")publicstaticbooleancheckDeviceHasNavigationBar(Contextactivity){booleanhasMenuKey=ViewConfiguration.get(activity).hasPermanentMenuKey();booleanhasBackKey=KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK&Key);if(!hasMenuKey&Key){//Thisdevicehasanavigationbarreturntrue;}returnfalse;}我们要获取屏幕总高度减去顶部高度和底部导航高度(设备有底部导航),如果你的屏幕有其他控件,也一起减去,然后平均季度。这样我们的RecyclerView的每个itemView就可以相等了。3.屏幕高度topHeight)/4;holder.itemView.setLayoutParams(layoutParams);其中topHeight是顶部、导航和其他控件的总高度。这将满足我们的需求。【本文为专栏作家“洪盛鹏”原创稿件,转载请联系原作者】点此阅读更多该作者好文
