アクションバーにタブがあります。大きな画面ではタブはアクションバーに埋め込まれていますが、小さな画面ではそうではありません。タブを手動で制御して、タブをアクションバーから分離できるようにしたい。abs__action_bar_embed_tabs を設定しようとしましたが、うまくいきませんでした
<resources>
<bool name="abs__action_bar_embed_tabs">false</bool>
</resources>
アクションバーにタブがあります。大きな画面ではタブはアクションバーに埋め込まれていますが、小さな画面ではそうではありません。タブを手動で制御して、タブをアクションバーから分離できるようにしたい。abs__action_bar_embed_tabs を設定しようとしましたが、うまくいきませんでした
<resources>
<bool name="abs__action_bar_embed_tabs">false</bool>
</resources>
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) {}
}
次に、これを以下のように呼び出します。
アクションバー内にタブを表示したい場合は、
setHasEmbeddedTabs(actionBar, true);
タブを別々に/アクションバーの下に表示したい場合は、
setHasEmbeddedTabs(actionBar, false);
クリフへのすべてのクレジット。
コードでタブを区切る解決策を見つけました。
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);
}
}
しかし今、私は新しい問題を抱えています。タブはタブバーを完全には埋めません。 アクションバーのタブがタブバーを埋めません