在Android JellyBean上更改Actionbar高度

我最近一直在开发一个Android应用程序,我需要为标签栏设置自定义布局和尺寸。 我到目前为止的方式是使用Jake Wharton的ActionBarSherlock库来支持pre-HoneyComb Android版本,并通过将样式应用于我编辑actionBarSize样式项的应用程序。

现在,我一直在测试Galaxy S3上的应用程序(上面有Jellybean),并且根据actionBarSize值,标签栏高度不再变化。

所以我开始查看JellyBean的代码,我在ActionBarPolicy类中find了这个方法:

  public int getTabContainerHeight() { TypedArray a = mContext.obtainStyledAttributes(null, R.styleable.ActionBar, com.android.internal.R.attr.actionBarStyle, 0); int height = a.getLayoutDimension(R.styleable.ActionBar_height, 0); Resources r = mContext.getResources(); if (!hasEmbeddedTabs()) { // Stacked tabs; limit the height height = Math.min(height, r.getDimensionPixelSize(R.dimen.action_bar_stacked_max_height)); } a.recycle(); return height; } 

从我在这个方法中收集的内容来看,似乎JellyBean限制TabBar的高度,当应用程序处于纵向模式时,通过将标签栏高度设置为“action_bar_stacked_max_height”维度值(48dp,在4.1的/values/dimen.xml文件),即使我在/values/dimen.xml设置了操作栏高度。

我已经尝试覆盖这个维度值,通过在我自己的dimen.xml文件dimen.xml其设置为我自己的值,但我没有运气。 它没用。

我的问题:

你们知道我可以覆盖“action_bar_stacked_max_height”维度值的方法吗?

先谢谢你!

Related of "在Android JellyBean上更改Actionbar高度"

在我看来,这是故意的,我不知道为什么。 bools.xml中有一些variables

 true false 

正如您已经提到的,在ActionBarPolicy.java中 ,嵌入标签的高度限制为48dip。 这就是为什么只能在Android JellyBean或更高版本中看到这种行为的原因。 我找不到比做一些javareflection更好的解决方案。 所以这是代码

 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; } 

onCreate使用hackJBPolicy()方法。 请注意,我使用了appcompat库中的ActionBar。 以下是使用此变通方法的示例项目的链接 。

毕竟,在我看来,如果您的ui设计与guidlines有点远,将来更容易创建与屏幕顶部对齐的自定义视图,而不是在标签模式下使用ActionBar。

尝试将android:actionBarSizeactionBarSize放在您正在使用的主题下,如下所示:

  

尝试使用android:height ,如下所示: