关于Toolbar中navigationIcon和title之间距离及展开

关于Toolbar中navigationIcon和title之间距离及展开

问题缘起

在进行Coolcode项目的MyclassActivity中,我发现navigationIcon和title之间的实际间距与
UI图不符,虽然康桐说不需要改,但是出于好奇心我还是希望明白其中原因。

问题分析

由于学习Android时间不长,无法一步直指问题所在,所以我们就从和Toolbar有关的所有代码里面
一个个找(在myclasses里面)。

首先我们在MyClassActivity中首次调用了BaseActivity中的initBackToolbar(Toolbar
toolbar, @StringRes int title, @DrawableRes int navigationIcon)方法
显然这个方法并没有对距离有任何修改。
那么我们在来看这个BaseActivity中的方法,它给Toolbar设置了title和navigationIcon
但是并不能看到其中有对之间的距离有做相应修改,我们翻看其他myclasses下的类,也并没有发现。

那么,问题看来只能是出现在Toolbar中了,那么来看一下Toolbar代码。
好长!相信没有完整的时间和计划大家是不会想好好看完这段代码的。那么我们直接来看里面
最重要的控制输出的代码onLayout(boolean changed, int l, int r, int b)

final int paddingLeft = getPaddingLeft();
//首先是获取系统的偏移量
int left = paddingLeft;
//这段代码用来计算Navigation的Layout
if (shouldLayout(mNavButtonView)) {
    if (isRtl) {
        right = layoutChildRight(mNavButtonView, right, collapsingMargins,
                alignmentHeight);
    } else {
        //计算完之后left的距离为paddingLeft+mNavButtonView的宽度+mNavButtonView
        自身的偏移量
        left = layoutChildLeft(mNavButtonView, left, collapsingMargins,
                alignmentHeight);
    }
}
//核心的方法,返回就是那个让距离错误的值
final int contentInsetLeft = getCurrentContentInsetLeft();
//left会从之前的left值也就是计算过Navigation的距离之后 和contentInsetLeft比较,取最大值
left = Math.max(left, contentInsetLeft);

...接下来计算Title的布局的时候左边距就是用的这个left

时间: 2024-10-13 07:08:47

关于Toolbar中navigationIcon和title之间距离及展开的相关文章

C#面向对象思想计算两点之间距离

题目为计算两点之间距离. 面向过程的思维方式,两点的横坐标之差,纵坐标之差,平方求和,再开跟,得到两点之间距离. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Classes_2_point_distance { class Program { static void Main(string[

JavaScript中this和$(this)之间的区别

jQuery中this和$(this)之间的区别: this返回的是当前对象的html对象,而$(this)返回的是当前对象的jQuery对象 举个正确的Demo实例: $("#textbox").hover( function() { this.title = "Test"; }, fucntion() { this.title = "OK”; } ); 以上的this为html元素即元素textbox,该元素有title属性,因此以上的程序没有错误.如

计算地球上两个坐标点(经度,纬度)之间距离sql函数

go --计算地球上两个坐标点(经度,纬度)之间距离sql函数 --作者:lordbaby --整理:www.aspbc.com CREATE FUNCTION [dbo].[fnGetDistance](@LatBegin REAL, @LngBegin REAL, @LatEnd REAL, @LngEnd REAL) RETURNS FLOAT AS BEGIN --距离(千米) DECLARE @Distance REAL DECLARE @EARTH_RADIUS REAL SET @

ios7中 丰富多彩的UIViewController之间的切换

转载自:http://onevcat.com/2013/10/vc-transition-in-ios7/ 毫无疑问,ViewController(在本文中简写为VC)是使用MVC构建Cocoa或者CocoaTouch程序时最重要的一个类,我们的日常工作中一般来说最花费时间和精力的也是在为VC部分编写代码.苹果产品是注重用户体验的,而对细节进行琢磨也是苹果对于开发者一直以来的要求和希望.在用户体验中,VC之间的关系,比如不同VC之间迁移和转换动画效果一直是一个值得不断推敲的重点.在iOS7中,苹

去除自定义Toolbar中左边距

问题 自定义Toolbar之后,发现左侧不能完全填充,总是留一点空白,如下图: 原因 查看Wiget.AppCompat.Toolbar的parent(Toolbar默认的style),如下: <style name="Base.Widget.AppCompat.Toolbar" parent="android:Widget"> <item name="titleTextAppearance">@style/TextApp

Android中Fragment和Activity之间的互操作代码例子

摘要 本文介绍了Android中一个Activity中有多个Fragment的情况下,Fragment之间如何通过Activity进行互操作. 源代码 源代码地址为:http://download.csdn.net/detail/logicteamleader/8931199 源代码使用ADT编写,ADT版本为2014,Android版本为android-22. 技术要点 1.在Activity中的多个Fragment之间要互操作,一定要通过此Activity,不能直接通信: 2.在Activi

ToolBar中的TextField为第一响应者时不弹出键盘

今天至练习的过程中又发现一个问题,就是我自己创建了一个ToolBar,ToolBar中添加了一个TextField. 当我运行程序的时候,用鼠标点了下TextField,使其成为第一响应者,第一次运行程序时没有问题,键盘能够弹出来,但是后来怎么点TextField,键盘都不会再弹出来了. 我重新建了一个工程,把代码粘过去,神奇的事情发生了,键盘居然又能弹上来了,后来又重新建了个工程,还是把代码粘过去,更神奇的事情依然发生了,键盘又隐身了.(也许你觉得我有一些小无聊,呵呵!) 但是需要声明的是,模

cocos2d-x 中LUA和平台之间的函数调用理解

先看一张流程图如下: 第一步: 先把NDKHelper中的方法转成LUA中可以调用的,转得方法可参考quick中LUA的用法.这个类主要是中间桥梁的作用,它可以根据是什么平台调用IOSNDKHelper或者AndroidSNDKHelper,这些判断都是用C语言来写的.还有就是对一些回调函数的保存机制和平台要用LUA中一些方法的保存. 第二步: IOS平台需要处理的就是IOSNDKHelper,这个类主要就是接收和发送给NDKHelper数据的方法,还有一个就是加载IOS平台的BasePlatf

TCP中close和shutdown之间的区别

该图片截取自<<IP高效编程-改善网络编程的44个技巧>>,第17个技巧. 如果想验证可以写个简单的网络程序,分别用close和shutdown来断开连接,然后用tcpdump查看交互过程,就一目了然了.本来我想自己写个程序验证,但是自己笔记本上没有linux环境,公司环境又不能通外网,所以就放弃了. TCP中close和shutdown之间的区别,布布扣,bubuko.com