Android、ActionBar标签状态检测

标签 android tabs actionbarsherlock

我正在使用 ActionBar 选项卡导航(使用操作栏 sherlock)。

如何检测标签栏的当前状态(堆叠、嵌入或下拉列表)??

最佳答案

没有用于此目的的公共(public) API 调用。


警告:以下方法将来可能会失效

虽然有一些反射技巧:

public boolean hasEmbeddedTabs(ActionBar actionBar){
    Boolean embedded = false;
    try {
        Class c = Class.forName("com.android.internal.app.ActionBarImpl");
        Field f = c.getDeclaredField("mHasEmbeddedTabs");
        f.setAccessible(true);
        embedded = f.getBoolean(actionBar);
        f.setAccessible(false);
    }catch (Exception e) {
        Log.e("MyApp","Not a fair play",e);
    }
    return embedded;
}

为了了解折叠状态:

public boolean areTabsCollapsed(ActionBar actionBar){
    Boolean collapsed = false;
    try {

        Class c = Class.forName("com.android.internal.app.ActionBarImpl");

        Class c2 = Class.forName("com.android.internal.widget.ScrollingTabContainerView");
        Method m = c2.getDeclaredMethod("isCollapsed");

        Field f2 = c.getDeclaredField("mTabScrollView");
        f2.setAccessible(true);
        Object scrollView = f2.get(actionBar);
        if(scrollView != null){
            collapsed = (Boolean) m.invoke(scrollView);
        }
        f2.setAccessible(false);


    }catch (Exception e) {
        e.printStackTrace();
    }
    return collapsed;
}

关于Android、ActionBar标签状态检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17639230/

相关文章:

android - 许多 AsyncTask 生成时出现 AsyncTask 性能问题。

android - java.lang.IllegalArgumentException : pointerIndex out of range Exception - dispatchTouchEvent

android audiomanager改变增益

angularjs - Bootstrap 3 : Deselect tab using angular js

android - 为多个对象使用通用类(actionBar 选项卡)

android - ABS 在 4.1 上运行良好,但在 2.2 上运行时抛出异常

android - 创建自定义布局时丢失 ActionBar 标题

java - Android 音频记录和播放已损坏

javascript - jQuery Vertical Tabs 使选项卡内容显示为内联 block

android - IntelliJ Idea 无法识别 ActionBarSherlock 中的兼容性库