@act262
2017-05-24T14:16:10.000000Z
字数 2090
阅读 1226
Android
通常在正常使用Toolbar的时候没有发现问题,如果我们修改了actionBarSize的值那么可能会出现Toolbar的NavButton没有居中。
在support v7中的Toolbar的构造方法里,support v7 rev24
版本以前
// 固定了顶部对齐导致高度不相同时出现不垂直居中
mButtonGravity = Gravity.TOP;
在24
版本以后可以设置对齐方式,所以
mButtonGravity = a.getInteger(R.styleable.Toolbar_buttonGravity, Gravity.TOP);
NavButton相关属性设置
private void ensureNavButtonView() {
if (mNavButtonView == null) {
mNavButtonView = new AppCompatImageButton(getContext(), null,
R.attr.toolbarNavigationButtonStyle);
final LayoutParams lp = generateDefaultLayoutParams();
// 如果包含了垂直居中属性则会垂直居中对齐
lp.gravity = GravityCompat.START | (mButtonGravity & Gravity.VERTICAL_GRAVITY_MASK);
mNavButtonView.setLayoutParams(lp);
}
}
Toolbar使用的样式(values.xml)
<!-- Toolbar styles -->
<item name="toolbarStyle">@style/Widget.AppCompat.Toolbar</item>
<item name="toolbarNavigationButtonStyle">@style/Widget.AppCompat.Toolbar.Button.Navigation</item>
具体的实现在不同版本,基础实现
<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="titleMargins">4dp</item>
<item name="maxButtonHeight">@dimen/abc_action_bar_default_height_material</item>
<item name="collapseIcon">?attr/homeAsUpIndicator</item>
<item name="collapseContentDescription">@string/abc_toolbar_collapse_description</item>
<item name="contentInsetStart">16dp</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="Base.Widget.AppCompat.Toolbar.Button.Navigation" parent="android:Widget">
<item name="android:background">?attr/controlBackground</item>
<item name="android:minWidth">56dp</item>
<item name="android:scaleType">center</item>
</style>
为了保证NavButton等可以垂直居中,如果Toolbar的高度等于NavButton的高度就相当于垂直居中了,所以在样式中可以让maxButtonHeight==minHeight -> actionBarSize
还有Toolbar内容的对齐默认是垂直居中对齐的了
private int mGravity = GravityCompat.START | Gravity.CENTER_VERTICAL;