我一直在尝试弄清楚如何对转储的XML布局有所了解,并且它的进展“相当好”。我目前不确定的唯一事情是:
当我使用命令时:
aapt dump xmltree <pathofapk> <pathofxmlfile>
我得到以下结果:
N: android=http://schemas.android.com/apk/res/android
E: LinearLayout (line=2)
A: android:orientation(0x010100c4)=(type 0x10)0x1
A: android:layout_width(0x010100f4)=(type 0x10)0xffffffff
A: android:layout_height(0x010100f5)=(type 0x10)0xffffffff
E: LinearLayout (line=7)
A: android:orientation(0x010100c4)=(type 0x10)0x0
A: android:background(0x010100d4)=@0x7f020004
A: android:layout_width(0x010100f4)=(type 0x10)0xffffffff
A: android:layout_height(0x010100f5)=(type 0x10)0xfffffffe
E: ImageView (line=12)
A: android:gravity(0x010100af)=(type 0x11)0x3
A: android:layout_gravity(0x010100b3)=(type 0x11)0x13
A: android:id(0x010100d0)=@0x7f090021
A: android:paddingLeft(0x010100d6)=(type 0x5)0xa01
A: android:paddingTop(0x010100d7)=(type 0x5)0x401
A: android:layout_width(0x010100f4)=(type 0x10)0xfffffffe
A: android:layout_height(0x010100f5)=(type 0x10)0xfffffffe
A: android:src(0x01010119)=@0x7f020006
E: ScrollView (line=21)
A: android:orientation(0x010100c4)=(type 0x10)0x1
A: android:layout_width(0x010100f4)=(type 0x10)0xffffffff
A: android:layout_height(0x010100f5)=(type 0x10)0xffffffff
A: android:layout_weight(0x01010181)=(type 0x4)0x3f800000
E: LinearLayout (line=25)
A: android:orientation(0x010100c4)=(type 0x10)0x1
A: android:id(0x010100d0)=@0x7f09002d
A: android:padding(0x010100d5)=(type 0x5)0xa01
A: android:layout_width(0x010100f4)=(type 0x10)0xffffffff
A: android:layout_height(0x010100f5)=(type 0x10)0xffffffff
E: EditText (line=29)
A: android:layout_gravity(0x010100b3)=(type 0x11)0x51
A: android:id(0x010100d0)=@0x7f09002e
A: android:layout_width(0x010100f4)=(type 0x10)0xffffffff
A: android:layout_height(0x010100f5)=(type 0x10)0xfffffffe
A: android:text(0x0101014f)="" (Raw: "")
A: android:hint(0x01010150)=@0x7f070050
E: EditText (line=36)
A: android:layout_gravity(0x010100b3)=(type 0x11)0x51
A: android:id(0x010100d0)=@0x7f09002f
A: android:layout_width(0x010100f4)=(type 0x10)0xffffffff
A: android:layout_height(0x010100f5)=(type 0x10)0xfffffffe
A: android:text(0x0101014f)="" (Raw: "")
A: android:hint(0x01010150)=@0x7f070051
A: android:password(0x0101015c)=(type 0x12)0xffffffff
E: LinearLayout (line=44)
A: android:orientation(0x010100c4)=(type 0x10)0x0
A: android:padding(0x010100d5)=(type 0x5)0xa01
A: android:layout_width(0x010100f4)=(type 0x10)0xffffffff
A: android:layout_height(0x010100f5)=(type 0x10)0xfffffffe
E: Button (line=48)
A: android:id(0x010100d0)=@0x7f090030
A: android:layout_width(0x010100f4)=(type 0x10)0xffffffff
A: android:layout_height(0x010100f5)=(type 0x10)0xfffffffe
A: android:text(0x0101014f)=@0x7f07000a
A: android:layout_weight(0x01010181)=(type 0x4)0x3f800000
E: Button (line=54)
A: android:id(0x010100d0)=@0x7f090031
A: android:layout_width(0x010100f4)=(type 0x10)0xffffffff
A: android:layout_height(0x010100f5)=(type 0x10)0xfffffffe
A: android:text(0x0101014f)=@0x7f070003
A: android:layout_weight(0x01010181)=(type 0x4)0x3f800000
一切都很好,但是我想弄清楚的是如何将以下代码转换为XML布局文件:
A: android:paddingLeft(0x010100d6)=(type 0x5)0xa01
A: android:paddingTop(0x010100d7)=(type 0x5)0x401
将这些值转换为十进制将导致:
paddingLeft:2561
paddingTop:1025
一切都很好,但是我一直在试图弄清楚(类型0x5的意思)。对于所有其他类型,结果在Android.util.TypedValue.class文件中定义
反编译后,得出0x5的以下结果:
// Field descriptor #8 I
public static final int TYPE_DIMENSION = 5;
在某种意义上说得通。但是,我需要知道它是一种什么样的价值,因此向下看,我发现以下值:
// Field descriptor #8 I
public static final int COMPLEX_UNIT_MM = 5;
但是,当我尝试使用2561mm和1025mm时(无论如何还是有点,比我的屏幕大25cm),整个屏幕充满了“父级LinearLayout”。
我不知道怎么了。谁能启发我这个话题?
最佳答案
这些类型值的数据结构在这里定义:
https://android.googlesource.com/platform/frameworks/base/+/gingerbread-release/include/utils/ResourceTypes.h#220
里面是类型代码的枚举;之后是小数和单位类型的位定义。 (您在这里看到的是单位类型-即20sp。)
关于android - 转储的XML布局文件填充位置行为不正确,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1979679/