toolbar的高度问题

学习toolbar,发现toolbar的默认高度有点高,本来以为是个很快就能解决的问题,结果看遍网上各种文章,各种尝试都不成功,于是自己好好研究了下。在此分享下,希望大家都有收获。

通过查看android的toolbar style可以得知,toolbar的最小高度是由android:minHeight属性决定的,默认的android:minHeight为

<item name="android:minHeight">?attr/actionBarSize</item>

actionBarSize定义为

<item name="actionBarSize">@dimen/abc_action_bar_default_height_material</item>

@dimen/abc_action_bar_default_height_material这个值在不同的value中定义不同

<dimen name="abc_action_bar_default_height_material">56dp</dimen>

values-land.xml

<dimen name="abc_action_bar_default_height_material">48dp</dimen>

...

问题在于当我在toolbar中设置了minHeight的属性后,发现并没有生效,无论是设置style还是直接设置属性都无效。
经过研究发现,当我们在activity中把toolbar设为actionbar的时候调用了

  Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
  setSupportActionBar(toolbar);

此时的toolbar被设置为了actionbar,同时也就应该默认应用了actionbar的style,于是实验,写了一个toolbar的style继承actionbar的style

<style name="ToolbarStyle" parent="Base.Widget.AppCompat.ActionBar">
    <item name="android:minHeight">@dimen/toolbar_minHeight</item>
</style>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimary"
    style="@style/ToolbarStyle"
    />

至此,toolbar的高度已经可以控制。同时本人有点强迫症,觉得好好的toolbar为啥要变成actionbar并继承actionbar的style才行,于是我把代码中的设置toolbar为actionbar那句注释了,并把toolbar的style改为继承默认的toolbar style,结果表明是有效的。

      Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
//    setSupportActionBar(toolbar);
<style name="ToolbarStyle" parent="Base.Widget.AppCompat.Toolbar">
    <item name="android:textAppearance">@style/ToolbarText</item>
    <item name="android:minHeight">@dimen/toolbar_minHeight</item>
</style>

到目前为止,基本搞清了Toolbar的默认高度设置问题。
但是新的问题又出现了,当我把toolbar的layout_Height设为wrap_content,且minHeight的值比较小的时候,发现toolbar的title与顶部有空隙,向下偏移了一个位置,然后我在toolbar中设置了各种padding=0,margin=0,android:titleMargin=0,但依然无效,最后都以为是字体的偏移引起的。

修改前,顶部有空隙.png

后来在查看toolbar的默认style时,发现了Toolbar设置的titleMargin并没有带android

<style name="Base.Widget.AppCompat.Toolbar" parent="android:Widget">
    <item name="titleTextAppearance">@style/TextAppearance.Widget.AppCompat.Toolbar.Title</item>
    <item name="subtitleTextAppearance">@style/TextAppearance.Widget.AppCompat.Toolbar.Subtitle</item>
    <item name="android:minHeight">?attr/actionBarSize</item>
    <item name="titleMargin">4dp</item>
    <item name="maxButtonHeight">@dimen/abc_action_bar_default_height_material</item>
    <item name="buttonGravity">top</item>
    <item name="collapseIcon">?attr/homeAsUpIndicator</item>
    <item name="collapseContentDescription">@string/abc_toolbar_collapse_description</item>
    <item name="contentInsetStart">16dp</item>
    <item name="contentInsetStartWithNavigation">@dimen/abc_action_bar_content_inset_with_nav</item>
    <item name="android:paddingLeft">@dimen/abc_action_bar_default_padding_start_material</item>
    <item name="android:paddingRight">@dimen/abc_action_bar_default_padding_end_material</item>
</style>
<style name="ToolbarStyle" parent="Base.Widget.AppCompat.Toolbar">
    <item name="titleTextAppearance">@style/ToolbarText</item>
    <item name="android:minHeight">@dimen/toolbar_minHeight</item>
    <item name="titleMargin">0dp</item>
</style>
修改后,问题解决.png

然后尝试设置titleMargin=0,结果显示正常了。这个问题也算花费了我较多的时间,目前为止,已经完美解决。本人只尝试了toolbar的style,相信actionbar的style也是类似。

总结:还是看看默认的style设置的属性能给我们更多的启发。toolbar的其他属性也能通过类似的方式进行挖掘。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,856评论 25 709
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,851评论 0 17
  • (二)伊人归来落白梨 前情回顾:他初遇她,后来向王母求得法术,却舍弃了一些东西。 不知不觉,年岁更替,当年那个在水...
    泼茶客阅读 3,146评论 2 4
  • 自开车变成日常之后,我那没见过世面的心灵就陆续受到了冲击。高架上不打灯的变道,地面上冲天刺耳的喇叭,还有闪瞎你双眼...
    小西瓜彭彭阅读 1,430评论 0 0