actionbar home按纽 左边距的问题

本文转载自http://www.jianshu.com/p/637dcc36b47b  作者 proud2008 來源:简书

一、setHomeAsUpIndicator()


getSupportActionBar().setHomeAsUpIndicator(R.drawable.btn_back);

跟踪源码(ToolbarWidgetWrapper.java)最终发现调用了这个方法

private void ensureNavButtonView() {
    if (mNavButtonView == null) {
        mNavButtonView = new ImageButton(getContext(), null, R.attr.toolbarNavigationButtonStyle);
        final LayoutParams lp = generateDefaultLayoutParams();
        lp.gravity = GravityCompat.START | (mButtonGravity & Gravity.VERTICAL_GRAVITY_MASK);
        mNavButtonView.setLayoutParams(lp);
   }
}

toolbarNavigationButtonStyle 找到样式找到

 <item name="toolbarNavigationButtonStyle">@style/Widget.AppCompat.Toolbar.Button.Navigation</item>

最终样式

 

<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>
可见是因为android:minWidth 在做怪

解决:

<style name="AppTheme" parent="AppBaseThemeAppCompat">
   ...
   <item name="toolbarNavigationButtonStyle">@style/MyToolbarNavigationButtonStyle</item>
</style>
<style name="MyToolbarNavigationButtonStyle" parent="Widget.AppCompat.Toolbar.Button.Navigation">
    <item name="android:minWidth">0dp</item>
    <item name="android:paddingLeft">@dimen/View_margin_10</item>
</style>


<style name="AppTheme" parent="AppBaseThemeAppCompat">
   ...
   <item name="toolbarNavigationButtonStyle">@style/MyToolbarNavigationButtonStyle</item>
</style>
<style name="MyToolbarNavigationButtonStyle" parent="Widget.AppCompat.Toolbar.Button.Navigation">
    <item name="android:minWidth">0dp</item>
    <item name="android:paddingLeft">@dimen/View_margin_10</item>
</style>

二、setlogo()

public void setLogo(Drawable drawable) {
    if (drawable != null) {
        ensureLogoView();
        if (!isChildOrHidden(mLogoView)) {
            addSystemView(mLogoView, true);
        }
    } else if (mLogoView != null && isChildOrHidden(mLogoView)) {
       removeView(mLogoView);
       mHiddenViews.remove(mLogoView);
    }
    if (mLogoView != null) {
        mLogoView.setImageDrawable(drawable);
    }
}
private void ensureLogoView() {
    if (mLogoView == null) {
          mLogoView = new ImageView(getContext());
    }
}



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值