Android 魅族等SmartBar适配

时间:2022-12-06 15:29:19

通过反射获取是否含有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 }