• 老李推荐:第14章8节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-获取控件列表并建立控件树 5


    看这段代码之前还是请回到“图13-6-1 NotesList控件列表”中重温一下一个控件的每个属性名和值是怎么组织起来的:

    android.widget.FrameLayout@41901ab0 drawing:mForeground=4,null

    padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0

    padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0

    drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false

    drawing:mForegroundGravity=3,119 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownX=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2244691 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=3,690 measurement:mMeasuredWidth=3,480 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 drawing:mLayerType=4,NONE padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 mID=10,id/content mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130703184 layout:mRight=3,480 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mBottom=3,800

    我们就以其中的一个属性”layout:mBottom=3,800”做为例子来解析一下它的格式:

    • 等号之前:控件属性名称,它是由两部分组成的,用冒号隔开,冒号之前代表该属性的类型,后面是属性的名称。实例中是”layout:mBottom”,其中layout代表这个是一个布局类的属性,也属于属性名的一部分
    • 等号之后逗号之前:属性值的字节长度,在这里是3,因为后面的属性值800做为字串的话刚好占了3个字节
    • 逗号之后:属性值,在这里是800,代表这个控件的最下面部分的Y坐标是800

    知道属性的格式就好去理解代码14-8-7所做的事情了:

    • 首先外层一个while循环去分析每一个属性
    • 找到等号的位置,然后取出等号之前的控件属性名字
    • 找到逗号的位置,然后取出等号之后到逗号之前的控件属性值的长度
    • 找到控件属性值的位置和控件属性值结束的位置,然后取出它们之间的控件属性值
    • 把该控件属性加入到properties列表里面保存起来
    • 把该控件属性名称和属性值加入namedProperties这个映射里面保存起来
    • 进入下一个循环解析下一个属性值,直到一行控件信息的长度尽头就跳出循环

    分析完loadProperties的第一部分后,我们继续往下看:

     private void loadProperties(String data) {  

      ...  

      Collections.sort(this.properties, new Comparator()  

      {  

      public int compare(ViewNode.Property source, ViewNode.Property destination) {  

      return source.name.compareTo(destination.name);  

        }  

      });  

     ...  

    代码14-8-10 ViewNode-loadProperties-属性列表排序

  • 相关阅读:
    AjaxPro.2.dll基本使用
    能够按页号提取word文档文本内容的小程序,由C#实现
    Reflect反编译C#程序
    模态对话框
    【转】Google Chrome如何保存密码口令
    Android 应用的签名的基本原则
    几款keylogger
    对一个利用短链接进行钓鱼行为的小小分析
    2011年10月百度笔试 RD3—第4题
    TCP中有哪些机制保证了可靠传输
  • 原文地址:https://www.cnblogs.com/poptest/p/5110605.html
Copyright © 2020-2023  润新知