Android开发中不得不了解知识点

开发 开发工具
我们可以用GridView控件或RecyclerView控件来实现,提倡用RecyclerView控件来实现了。一屏显示16个应用,这样就需要和屏幕的知识点联系上了。

 

对于这样的布局,我们可以用GridView控件或RecyclerView控件来实现,提倡用RecyclerView控件来实现了。一屏显示16个应用,这样就需要和屏幕的知识点联系上了。

1、获取顶部status bar 高度

  1. /** 
  2. * 获取顶部status bar 高度 
  3. */ 
  4. private int getStatusBarHeight() { 
  5.     Resources resources = mActivity.getResources(); 
  6.     int resourceId = resources.getIdentifier("status_bar_height""dimen","android"); 
  7.     int height = resources.getDimensionPixelSize(resourceId); 
  8.     Log.v("dbw""Status height:" + height); 
  9.     return height; 

2、获取底部 navigation bar 高度

  1. private int getNavigationBarHeight() { 
  2.     Resources resources = mActivity.getResources(); 
  3.     int resourceId = resources.getIdentifier("navigation_bar_height","dimen""android"); 
  4.     int height = resources.getDimensionPixelSize(resourceId); 
  5.     Log.v("dbw""Navi height:" + height); 
  6.     return height; 

这里对于底部,我们得花点心思,华为手机自带下面有底部导航。我们要先通过判断设备是否有返回键、菜单键(不是虚拟键,是手机屏幕外的按键)来确定是否有navigation bar

(已验证可行)。主要是KeyEvent.KEYCODE_BACK和hasPermanentMenuKey

  1. @SuppressLint("NewApi")    
  2.     public static boolean checkDeviceHasNavigationBar(Context activity) {   
  3.         boolean hasMenuKey = ViewConfiguration.get(activity)   
  4.                 .hasPermanentMenuKey();   
  5.         boolean hasBackKey = KeyCharacterMap   
  6.                 .deviceHasKey(KeyEvent.KEYCODE_BACK);   
  7.         if (!hasMenuKey && !hasBackKey) {   
  8.             // 这个设备有一个导航栏   
  9.             return true;   
  10.         }   
  11.         return false;   
  12.     }  

我们要获取屏幕的总高度减去 顶部高度和底部导航的高度(设备存在底部导航),如果你的屏幕还有其他控件,也要一起减去,再平均四等分。这样我们的RecyclerView的每个itemView才能均等。

3、屏幕高度

  1. DisplayMetrics displayMetrics = new DisplayMetrics(); 
  2. Activity activity = (Activity) mContext; 
  3. activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); 
  4. LayoutParams layoutParams = holder.itemView.getLayoutParams(); 
  5. layoutParams.height = (displayMetrics.heightPixels - topHeight)/4; 
  6.  holder.itemView.setLayoutParams(layoutParams); 

其中topHeight为顶部、导航和其他控件的总高度。这样就能实现我们的需求了。

【本文为51CTO专栏作者“洪生鹏”的原创稿件,转载请联系原作者】

戳这里,看该作者更多好文

责任编辑:武晓燕 来源: 51CTO专栏
相关推荐

2014-06-16 10:03:54

分组交换

2019-06-06 16:13:14

JVMJava后端

2012-02-21 09:20:50

Hadoop大数据

2016-12-06 08:35:47

浏览器内核Gecko

2018-04-16 23:14:39

SD-WANSDN网络

2015-03-04 09:23:46

广域网网络优化

2013-02-19 10:01:53

大数据大数据科学主流解决方案

2019-11-14 15:38:46

AndroidRelease项目

2024-06-05 11:36:28

2010-05-26 15:58:52

MySQL远程连接

2012-04-09 16:13:21

Android开发者

2010-05-21 09:40:57

MySQL出错代码列表

2010-05-10 13:01:03

OracleDBA面试

2010-11-02 14:51:11

职场

2010-05-25 09:58:43

MySQL数据库

2019-08-09 11:40:38

JavaScriptCSS技术

2010-07-23 18:39:52

SQL Server游

2021-04-12 08:56:00

多线程Future模式

2019-12-24 14:04:59

PythonExcel数据处理

2020-07-09 12:50:29

JVM内存管理Java
点赞
收藏

51CTO技术栈公众号