package com.meizu.smartbar; 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; public class SmartBarUtils { /** * 调用 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(); } } /** * 调用 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(); } } }