Android (ActionBarSherlock) 是否有办法在横屏和竖屏下保持相同的 ActionBar 高度?

10

我最近几天一直在使用ActionBar和ActionBarSherlock,填写ActionBar中的一些信息时遇到了一些问题。

当应用程序在纵向模式下运行时,ActionBar看起来很好,可以显示所有数据,例如:

纵向模式下的ActionBar

但是,当我将应用程序切换为横向模式时,一些数据被裁剪了:

横向模式下的ActionBar

您可以注意到由于ActionBar的新高度,状态图标和电子邮件都被裁剪了。

在这种情况下,我希望保持纵向和横向的大小相同,以便应用程序看起来很好。我不能减小操作栏标题的字体大小,因为它可能包括其他图标。

我使用Html.fromHtml将这些图标放置在操作栏标题和副标题中。

有解决这个问题的想法吗?我正在使用ActionBarSherlock库!

1个回答

23

可能不太好看,但可行的一个方法是在dimens.xml中覆盖ActionBar的默认高度值。

例如,在纵向方向上默认值为:

<dimen name="abs__action_bar_default_height">48dip</dimen>

在横屏模式下:

<dimen name="abs__action_bar_default_height">40dip</dimen>
可能有更简洁的方法,但我必须承认我对ActionBarSherlock的内部知之甚少。
编辑:想一想,在ICS上使用本机ActionBar时,这可能不起作用,因为高度将解析为?android:attr/actionBarSize中平台值。我建议您等待更好的建议,例如来自Jake本人。 第二次编辑: 根据Jake的回复,似乎要使其与在ICS和pre-ICS设备上使用ActionBarSherlock正常工作,只需将以下内容添加到您应用程序的主题中即可:
<item name="actionBarSize">@dimen/some_value</item>
<item name="android:actionBarSize">@dimen/some_value</item> 
你可以将实际值添加到对应的纵向/横向资源桶中。 第三次编辑 [感谢 alvarolb]: 样式的 XML 示例:
<?xml version="1.0" encoding="utf-8"?>
<resources>   
    <style name="Theme.Styled" parent="Theme.Sherlock.Light.DarkActionBar">
        <item name="actionBarSize">48dip</item>
        <item name="android:actionBarSize">48dip</item> 
    </style> 
</resources>

在对应的活动中,设置这个新样式。

android:theme="@style/Theme.Styled"

然后...它有效了!


赞同听取Jake的意见。这是一个有趣的问题。我刚在ICS上的原始GTalk应用程序中进行了测试,它没有出现文本截断问题。 - Davek804
这是个不错的方法,但我认为它只适用于ICS之前的设备。在GTalk应用程序中并没有出现这个问题,因为标题大小(而不是副标题)似乎比本地大小小。但正如我所评论的那样,我无法这样做,因为标题也将包括其他(更大的)图标。我会等待Jake的回复=) - Alvaro Luis Bustamante
1
你的跟进是正确的。只需要在主题中添加一个非“android”前缀的版本,以便它可以在ICS之前的版本上运行。建议你划掉顶部部分。 - Jake Wharton
我用一个例子修改了你的回复...现在看起来运行良好!谢谢! - Alvaro Luis Bustamante

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接