Toolbar消除默认左边距

最近在项目中用Toolbar封装标题栏,替换之前的Linearlayout,遇到了设置Navigationicon的时候左边多出了空白区域,通过查阅资料以及查看Toolbar的源码,找到了三种可以消除左边距的办法。

1. 将需要设置的图片切成以Toolbar的高度为边长的正方形图片
2. 设置Navigationicon的style
3. 通过反射更改Navigationicon的mNavButtonView大小

切图方式

  • 通过查看Toolbar的源码可以知道,当调用setNavigationIcon的时候会间接调用
 private ImageButton mNavButtonView;
   public void setNavigationIcon(@Nullable Drawable icon) {
        if (icon != null) {
            ensureNavButtonView();
            if (!isChildOrHidden(mNavButtonView)) {
                addSystemView(mNavButtonView, true);
            }
        } else if (mNavButtonView != null && isChildOrHidden(mNavButtonView)) {
            removeView(mNavButtonView);
            mHiddenViews.remove(mNavButtonView);
        }
        if (mNavButtonView != null) {
            mNavButtonView.setImageDrawable(icon);
        }
    }
  • 最终图标赋值给了Imagebutton

设置Style方式

  • 自定义一个Navigationicon样式
 <style name="NavigationStyle" parent="@style/Widget.AppCompat.Toolbar.Button.Navigation">
        <item name="android:minWidth">0dp</item>
        <item name="android:paddingLeft">0dp</item>
        <item name="android:scaleType">centerInside</item>
    </style>
  • 自定义一个Activity的样式引入Navigationicon的样式
<style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="toolbarNavigationButtonStyle">@style/NavigationStyle</item>
        <item name="windowNoTitle">true</item>
    </style>
  • 给Activity设置样式
<activity
            android:name=".MainActivity"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
  • 边距消除

通过反射修改Navigationicon的大小

  Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        toolbar.setNavigationIcon(R.mipmap.arrow_black_back);
        try {
            Field mNavButtonView = Toolbar.class.getDeclaredField("mNavButtonView");
            if (mNavButtonView != null){
                mNavButtonView.setAccessible(true);
                AppCompatImageButton nbv = (AppCompatImageButton) mNavButtonView.get(toolbar);
                nbv.setMinimumWidth(0);
            }
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,935评论 0 17
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 177,123评论 25 709
  • 本人初学Android,最近做了一个实现安卓简单音乐播放功能的播放器,收获不少,于是便记录下来自己的思路与知识总结...
    落日柳风阅读 19,385评论 2 41
  • 原文地址:http://www.android100.org/html/201606/06/241682.html...
    AFinalStone阅读 4,932评论 0 1
  • 愿你有高跟鞋也有跑鞋,喝茶也喝酒。愿你有勇敢的朋友,有牛逼的对手。愿你对过往的一切情深意重,但从不回头。愿你特别美...
    jiaxiaolei阅读 1,243评论 0 0

友情链接更多精彩内容