通过反射获取是否含有SmartBar:
1 /** 2 * 判断是否有SmartBar 3 */ 4 private boolean hasSmartBar() { 5 // SP存储是否显示SmartBar 6 if (!SharedPresUtil.getBoolean("SmartBar_Type", true)) { 7 return false; 8 } 9 10 try { 11 // 新型号可用反射调用Build.hasSmartBar() 12 Method[] methods = Class.forName("android.os.Build").getMethods(); 13 for (Method method : methods) { 14 if (method.getName().equals("hasSmartBar")) { 15 return ((Boolean) method.invoke(null)).booleanValue(); 16 } 17 } 18 } catch (Exception e) { 19 e.printStackTrace(); 20 } 21 return false; 22 }
创建menu文件,作为渲染。
1 @Override 2 public boolean onCreateOptionsMenu(Menu menu) { 3 if (hasSmartBar()) { 4 MenuInflater inflater = getMenuInflater(); 5 inflater.inflate(R.menu.menu_more, menu); 6 MenuItem menu_profile = menu.findItem(R.id.menu_profile); 7 MenuItem menu_run = menu.findItem(R.id.menu_start); 8 MenuItem menu_social = menu.findItem(R.id.menu_social); 9 menu_profile.setIcon(R.drawable.icon_meizu_profile); 10 menu_social.setIcon(R.drawable.icon_meizu_social); 11 switch (mFragmentTabAdapter.getCurrentTab()) { 12 case 1: 13 case 3: 14 break; 15 case 2: 16 menu_social.setIcon(R.drawable.icon_meizu_social_selected); 17 break; 18 case 0: 19 default: 20 menu_profile.setIcon(R.drawable.icon_meizu_profile_selected); 21 } 22 if (isStart()) { 23 menu_run.setIcon(R.drawable.icon_meizu_end); 24 } else { 25 menu_run.setIcon(R.drawable.icon_meizu_start); 26 } 27 return true; 28 } else { 29 return false; 30 } 31 } 32 33 @Override 34 public boolean onOptionsItemSelected(MenuItem item) { 35 switch (item.getItemId()) { 36 case R.id.menu_profile: 37 mFragmentTabAdapter.showTab(0); 38 break; 39 case R.id.menu_start: 40 onStartClick(); // 开始按钮 41 break; 42 case R.id.menu_social: 43 mFragmentTabAdapter.showTab(2); 44 break; 45 case R.id.menu_rank: 46 mFragmentTabAdapter.showTab(1); 47 break; 48 49 case R.id.menu_more: 50 mFragmentTabAdapter.showTab(3); 51 break; 52 default: 53 break; 54 } 55 invalidateOptionsMenu(); // 刷新 56 return super.onOptionsItemSelected(item); 57 }
最后,隐藏app常规的底部菜单栏。
1 if (hasSmartBar()) { 2 dismissTabHost();//判断是否有SmartBar的手机隐藏底部菜单栏 3 }