魅族 好烦,感觉底层没写好。适配很坑
隐藏 smartBar 但是键盘好像也不管用了.
getWindow().getDecorView()
.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
"Meizu".equalsIgnoreCase(Build.MANUFACTURER)
魅族 Utils
package com.bm.feipingflyclip.utils;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import android.app.ActionBar;
import android.content.res.Resources.NotFoundException;
import android.graphics.drawable.Drawable;
import android.os.Build;
public class SmartUtils {
/**
* 调用 ActionBar.setTabsShowAtBottom(boolean) 方法� *
* <p>如果 android:uiOptions="splitActionBarWhenNarrow",则å¯è®¾ç½®ActionBar Tabs显示在底æ ã?
*
* <p>示例�/p>
* <pre class="prettyprint">
* public class MyActivity extends Activity implements ActionBar.TabListener {
*
* protected void onCreate(Bundle savedInstanceState) {
* super.onCreate(savedInstanceState);
* ...
*
* final ActionBar bar = getActionBar();
* bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
* SmartBarUtils.setActionBarTabsShowAtBottom(bar, true);
*
* bar.addTab(bar.newTab().setText("tab1").setTabListener(this));
* ...
* }
* }
* </pre>
*/
public static void setActionBarTabsShowAtBottom(ActionBar actionbar, boolean showAtBottom) {
try {
Method method = Class.forName("android.app.ActionBar").getMethod(
"setTabsShowAtBottom", new Class[] { boolean.class });
try {
method.invoke(actionbar, showAtBottom);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 判断是否有SmartBar
*/
public static boolean hasSmartBar() {
try {
// 新型号可用反射调用Build.hasSmartBar()
Method[] methods = Class.forName("android.os.Build").getMethods();
for (Method method : methods) {
if (method.getName().equals("hasSmartBar")) {
return ((Boolean) method.invoke(null)).booleanValue();
}
}
} catch (Exception e) {
e.printStackTrace();
}
// 反射不到Build.hasSmartBar(),则用Build.DEVICE判断
if (Build.DEVICE.equals("mx2")) {
return true;
} else if (Build.DEVICE.equals("mx") || Build.DEVICE.equals("m9")) {
return false;
}
return false;
}
/**
* 调用 ActionBar.setActionBarViewCollapsable(boolean) 方法� *
* <p>设置ActionBar顶æ æ— æ˜¾ç¤ºå†…å®¹æ—¶æ˜¯å¦éšè—ã€? *
* <p>示例�/p>
* <pre class="prettyprint">
* public class MyActivity extends Activity {
*
* protected void onCreate(Bundle savedInstanceState) {
* super.onCreate(savedInstanceState);
* ...
*
* final ActionBar bar = getActionBar();
*
* // 调用setActionBarViewCollapsable,并设置ActionBar没有显示内容,则ActionBar顶æ ä¸æ˜¾ç¤? * SmartBarUtils.setActionBarViewCollapsable(bar, true);
* bar.setDisplayOptions(0);
* }
* }
* </pre>
*/
public static void setActionBarViewCollapsable(ActionBar actionbar, boolean collapsable) {
try {
Method method = Class.forName("android.app.ActionBar").getMethod(
"setActionBarViewCollapsable", new Class[] { boolean.class });
try {
method.invoke(actionbar, collapsable);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 调用 ActionBar.setActionModeHeaderHidden(boolean) 方法� *
* <p>设置ActionMode顶æ 是å¦éšè—ã€? *
* <p>示例�/p>
* <pre class="prettyprint">
* public class MyActivity extends Activity {
*
* protected void onCreate(Bundle savedInstanceState) {
* super.onCreate(savedInstanceState);
* ...
*
* final ActionBar bar = getActionBar();
*
* // ActionBar转为ActionMode时,ä¸æ˜¾ç¤ºActionMode顶æ
* SmartBarUtils.setActionModeHeaderHidden(bar, true);
* }
* }
* </pre>
*/
public static void setActionModeHeaderHidden(ActionBar actionbar, boolean hidden) {
try {
Method method = Class.forName("android.app.ActionBar").getMethod(
"setActionModeHeaderHidden", new Class[] { boolean.class });
try {
method.invoke(actionbar, hidden);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 调用ActionBar.setBackButtonDrawable(Drawable)方法
*
* <p>设置返回键图æ ? *
* <p>示例�/p>
* <pre class="prettyprint">
* public class MyActivity extends Activity {
*
* protected void onCreate(Bundle savedInstanceState) {
* super.onCreate(savedInstanceState);
* ...
*
* final ActionBar bar = getActionBar();
* // 自定义ActionBarçš„è¿”å›žé”®å›¾æ ‡
* SmartBarUtils.setBackIcon(bar, getResources().getDrawable(R.drawable.ic_back));
* ...
* }
* }
* </pre>
*/
public static void setBackIcon(ActionBar actionbar, Drawable backIcon) {
try {
Method method = Class.forName("android.app.ActionBar").getMethod(
"setBackButtonDrawable", new Class[] { Drawable.class });
try {
method.invoke(actionbar, backIcon);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (NotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}