4

アクションバーにタブがあります。大きな画面ではタブはアクションバーに埋め込まれていますが、小さな画面ではそうではありません。タブを手動で制御して、タブをアクションバーから分離できるようにしたい。abs__action_bar_embed_tabs を設定しようとしましたが、うまくいきませんでした

<resources>
    <bool name="abs__action_bar_embed_tabs">false</bool>
</resources>
4

4 に答える 4

9

action_bar_embed_tabsこれは古い投稿であることは承知していますが、将来の読者のために使用するソリューションを追加したいと思います。

以下のメソッドを作成します (インポートを処理します)。

public static void setHasEmbeddedTabs(Object inActionBar, final boolean inHasEmbeddedTabs)
{
    // get the ActionBar class
    Class<?> actionBarClass = inActionBar.getClass();

    // if it is a Jelly Bean implementation (ActionBarImplJB), get the super class (ActionBarImplICS)
    if ("android.support.v7.app.ActionBarImplJB".equals(actionBarClass.getName()))
    {
            actionBarClass = actionBarClass.getSuperclass();
    }

    try
    {
            // try to get the mActionBar field, because the current ActionBar is probably just a wrapper Class
            // if this fails, no worries, this will be an instance of the native ActionBar class or from the ActionBarImplBase class
            final Field actionBarField = actionBarClass.getDeclaredField("mActionBar");
            actionBarField.setAccessible(true);
            inActionBar = actionBarField.get(inActionBar);
            actionBarClass = inActionBar.getClass();
    }
    catch (IllegalAccessException e) {}
    catch (IllegalArgumentException e) {}
    catch (NoSuchFieldException e) {}

    try
    {
            // now call the method setHasEmbeddedTabs, this will put the tabs inside the ActionBar
            // if this fails, you're on you own <img src="http://www.blogc.at/wp-includes/images/smilies/icon_wink.gif" alt=";-)" class="wp-smiley">
            final Method method = actionBarClass.getDeclaredMethod("setHasEmbeddedTabs", new Class[] { Boolean.TYPE });
            method.setAccessible(true);
            method.invoke(inActionBar, new Object[]{ inHasEmbeddedTabs });
    }
    catch (NoSuchMethodException e)        {}
    catch (InvocationTargetException e) {}
    catch (IllegalAccessException e) {}
    catch (IllegalArgumentException e) {}
}

次に、これを以下のように呼び出します。

  1. アクションバー内にタブを表示したい場合は、

    setHasEmbeddedTabs(actionBar, true);

  2. タブを別々に/アクションバーの下に表示したい場合は、

    setHasEmbeddedTabs(actionBar, false);

クリフへのすべてのクレジット。

于 2014-03-20T09:15:02.727 に答える
6

コードでタブを区切る解決策を見つけました。

private void embeddedTabs(Object actionBar, Boolean embed_tabs) {
    try {
        if (actionBar instanceof ActionBarWrapper) {
            // ICS and forward
            try {
                Field actionBarField = actionBar.getClass()
                        .getDeclaredField("mActionBar");
                actionBarField.setAccessible(true);
                actionBar = actionBarField.get(actionBar);
            } catch (Exception e) {
                Log.e("", "Error enabling embedded tabs", e);
            }
        }
        Method setHasEmbeddedTabsMethod = actionBar.getClass()
                .getDeclaredMethod("setHasEmbeddedTabs", boolean.class);
        setHasEmbeddedTabsMethod.setAccessible(true);
        setHasEmbeddedTabsMethod.invoke(actionBar, embed_tabs);
    } catch (Exception e) {
        Log.e("", "Error marking actionbar embedded", e);
    }
}

しかし今、私は新しい問題を抱えています。タブはタブバーを完全には埋めません。 アクションバーのタブがタブバーを埋めません

于 2012-11-27T12:12:19.397 に答える
1
于 2012-11-27T12:29:18.047 に答える