Ответ 1
мне кажется, что это было сделано специально, и я не знаю, почему. В bools.xml
<bool name="action_bar_embed_tabs">true</bool>
<bool name="action_bar_embed_tabs_pre_jb">false</bool>
Высота вкладок вставки ограничена 48dip в ActionBarPolicy.java, как вы уже упоминали. Вот почему такое поведение можно увидеть только в Android JellyBean или выше. Я не могу найти лучшего решения, чем сделать некоторое отражение в java. Итак, вот код
private void hackJBPolicy() {
View container = findScrollingTabContainer();
if (container == null) return;
try {
int height = getResources().getDimensionPixelSize(R.dimen.action_bar_height);
Method method = container.getClass()
.getDeclaredMethod("setContentHeight", Integer.TYPE);
method.invoke(container, height);
} catch (NoSuchMethodException e) {
Log.e(LOG_TAG, e.getLocalizedMessage(), e);
} catch (IllegalArgumentException e) {
Log.e(LOG_TAG, e.getLocalizedMessage(), e);
} catch (IllegalAccessException e) {
Log.e(LOG_TAG, e.getLocalizedMessage(), e);
} catch (InvocationTargetException e) {
Log.e(LOG_TAG, e.getLocalizedMessage(), e);
}
}
private View findScrollingTabContainer() {
View decor = getWindow().getDecorView();
int containerId = getResources().getIdentifier("action_bar_container", "id", "android");
// check if appcompat library is used
if (containerId == 0) {
containerId = R.id.action_bar_container;
}
FrameLayout container = (FrameLayout) decor.findViewById(containerId);
for (int i = 0; i < container.getChildCount(); i++) {
View scrolling = container.getChildAt(container.getChildCount() - 1);
String simpleName = scrolling.getClass().getSimpleName();
if (simpleName.equals("ScrollingTabContainerView")) return scrolling;
}
return null;
}
Используйте метод hackJBPolicy()
в onCreate
. Обратите внимание, что я использовал ActionBar из библиотеки appcompat. Вот ссылка в примерный проект с использованием этого обходного пути.
В конце концов, мне кажется, что в будущем было бы проще создать пользовательский вид, выровненный в верхней части экрана, вместо использования ActionBar в режиме вкладок, если ваш дизайн ui немного удален от ориентиров.