package cn.scau.scautreasure.helper; import android.support.v7.app.ActionBar; import android.support.v7.app.ActionBarImplJB; import android.support.v7.app.ActionBarImplJBMR2; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * Created by special on 14-5-11. */ public class ActionBarHelper { /** * * 本方法用于强制把 Action Bar Tab 强制放在 Action Bar。 * * 原理:通过 Java 反射功能调用私有函数 setHasEmbeddedTabs * 实现。具体可以参考源代码 -> * https://github.com/android/platform_frameworks_support/tree/81b3862db1f0e0c24f0991e212ba43a74cf25fc2/v7/appcompat/src/android/support/v7/app * * 支持版本: AppCompat-v7:19.+ * * @param actionBar */ public static void enableEmbeddedTabs(ActionBar actionBar){ if (actionBar instanceof ActionBarImplJBMR2) { try { Field actionBarField = actionBar.getClass().getSuperclass().getSuperclass().getDeclaredField("mActionBar"); actionBarField.setAccessible(true); enableEmbeddedTabs(actionBarField.get(actionBar)); } catch (Exception e) { e.printStackTrace(); } } else if (actionBar instanceof ActionBarImplJB) { try { Field actionBarField = actionBar.getClass().getSuperclass().getDeclaredField("mActionBar"); actionBarField.setAccessible(true); enableEmbeddedTabs(actionBarField.get(actionBar)); } catch (Exception e) { e.printStackTrace(); } } else { enableEmbeddedTabs((Object) actionBar); } } private static void enableEmbeddedTabs(Object actionBar) { try { Method setHasEmbeddedTabsMethod = actionBar.getClass().getDeclaredMethod("setHasEmbeddedTabs", boolean.class); setHasEmbeddedTabsMethod.setAccessible(true); setHasEmbeddedTabsMethod.invoke(actionBar, true); } catch (Exception e) { e.printStackTrace(); } } }