[关闭]
@act262 2017-05-24T14:16:10.000000Z 字数 2090 阅读 1079

Toolbar NavButton不居中问题

Android


通常在正常使用Toolbar的时候没有发现问题,如果我们修改了actionBarSize的值那么可能会出现Toolbar的NavButton没有居中。

在support v7中的Toolbar的构造方法里,support v7 rev24版本以前

  1. // 固定了顶部对齐导致高度不相同时出现不垂直居中
  2. mButtonGravity = Gravity.TOP;

24版本以后可以设置对齐方式,所以

  1. mButtonGravity = a.getInteger(R.styleable.Toolbar_buttonGravity, Gravity.TOP);

NavButton相关属性设置

  1. private void ensureNavButtonView() {
  2. if (mNavButtonView == null) {
  3. mNavButtonView = new AppCompatImageButton(getContext(), null,
  4. R.attr.toolbarNavigationButtonStyle);
  5. final LayoutParams lp = generateDefaultLayoutParams();
  6. // 如果包含了垂直居中属性则会垂直居中对齐
  7. lp.gravity = GravityCompat.START | (mButtonGravity & Gravity.VERTICAL_GRAVITY_MASK);
  8. mNavButtonView.setLayoutParams(lp);
  9. }
  10. }

Toolbar使用的样式(values.xml)

  1. <!-- Toolbar styles -->
  2. <item name="toolbarStyle">@style/Widget.AppCompat.Toolbar</item>
  3. <item name="toolbarNavigationButtonStyle">@style/Widget.AppCompat.Toolbar.Button.Navigation</item>

具体的实现在不同版本,基础实现

  1. <style name="Base.Widget.AppCompat.Toolbar" parent="android:Widget">
  2. <item name="titleTextAppearance">@style/TextAppearance.Widget.AppCompat.Toolbar.Title</item>
  3. <item name="subtitleTextAppearance">@style/TextAppearance.Widget.AppCompat.Toolbar.Subtitle</item>
  4. <item name="android:minHeight">?attr/actionBarSize</item>
  5. <item name="titleMargins">4dp</item>
  6. <item name="maxButtonHeight">@dimen/abc_action_bar_default_height_material</item>
  7. <item name="collapseIcon">?attr/homeAsUpIndicator</item>
  8. <item name="collapseContentDescription">@string/abc_toolbar_collapse_description</item>
  9. <item name="contentInsetStart">16dp</item>
  10. <item name="android:paddingLeft">@dimen/abc_action_bar_default_padding_start_material</item>
  11. <item name="android:paddingRight">@dimen/abc_action_bar_default_padding_end_material</item>
  12. </style>
  13. <style name="Base.Widget.AppCompat.Toolbar.Button.Navigation" parent="android:Widget">
  14. <item name="android:background">?attr/controlBackground</item>
  15. <item name="android:minWidth">56dp</item>
  16. <item name="android:scaleType">center</item>
  17. </style>

为了保证NavButton等可以垂直居中,如果Toolbar的高度等于NavButton的高度就相当于垂直居中了,所以在样式中可以让maxButtonHeight==minHeight -> actionBarSize

还有Toolbar内容的对齐默认是垂直居中对齐的了

  1. private int mGravity = GravityCompat.START | Gravity.CENTER_VERTICAL;
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注