Android 如何以编程方式设置动作栏的高度

Android 如何以编程方式设置动作栏的高度,android,android-actionbar,android-actionbar-compat,Android,Android Actionbar,Android Actionbar Compat,我正在Android操作栏中实现一个自定义视图。问题是,在某些情况下,我需要将操作栏的高度增加一倍,以便完全显示视图。我可以使用自定义主题设置高度,但此高度是静态的 是否可以通过编程方式更改操作栏高度?您可以使用反射(可能不是一个好主意): RyanCheu的回答对我来说很有效,但我发现如果我在活动中选择了文本,文本选择工具栏将以默认的操作栏大小出现,从而调整了活动的大小,删除了文本选择,因此不可能使用复制和选择所有功能。最后,我回到了使用主题设置动作栏高度,并使用setTheme()和recr

我正在Android操作栏中实现一个自定义视图。问题是,在某些情况下,我需要将操作栏的高度增加一倍,以便完全显示视图。我可以使用自定义主题设置高度,但此高度是静态的


是否可以通过编程方式更改操作栏高度?

您可以使用反射(可能不是一个好主意):


RyanCheu的回答对我来说很有效,但我发现如果我在活动中选择了文本,文本选择工具栏将以默认的操作栏大小出现,从而调整了活动的大小,删除了文本选择,因此不可能使用复制和选择所有功能。最后,我回到了使用主题设置动作栏高度,并使用setTheme()和recreate()以编程方式更改主题。示例代码如下:


这似乎是不可能的,这也违背了Android风格指南。备选方案有:创建自定义视图或要求设计师使用标准android模式。请选中此选项。我也有同样的问题,在AppCompact中,2.X中的自定义Actionbar是全屏的。这可能会对您有所帮助。不再需要这样做,因为使用lolillop,您可以使用新的工具栏api并设置高度,但无法工作:DeclaredField“mContentHeight”似乎不再可用
    Window window = getWindow();
    View v = window.getDecorView();
    int actionBarId = getResources().getIdentifier("action_bar", "id", "android");
    ViewGroup actionBarView = (ViewGroup) v.findViewById(actionBarId);
    try {
        Field f = actionBarView.getClass().getSuperclass().getDeclaredField("mContentHeight");
        f.setAccessible(true);
        f.set(actionBarView, 50);
    } catch (NoSuchFieldException e) {

    } catch (IllegalAccessException e) {

    }