ViewGroup及其包含View的XML属性

首先解答这个问题:



    


TabLayout的XML属性中并没有 layout_width, layout_height, 凭什么要加这两个属性?还必须要加,否则 AS 提示错误:

ViewGroup及其包含View的XML属性_第1张图片
Screen Shot 2016-06-01 at 23.45.42.png

加的时候 AS 提示它是 required 的:

ViewGroup及其包含View的XML属性_第2张图片
Screen Shot 2016-06-01 at 23.23.26.png

官方文档里是这么描述的:

ViewGroup及其包含View的XML属性_第3张图片
Screen Shot 2016-06-01 at 23.12.13.png
  • ViewGroup类包含一个嵌入类 LayoutParams
  • ViewGroup的子类(太多了:LinearLayout、RelativeLayout、RecyclerView……)也包含一个嵌入类 LayoutParams,并且继承自 ViewGroup.LayoutParams
  • LayoutParams并不是ViewGroup自己用的,而是给ViewGroup容器中所容纳的元素使用,比如上图中:
    • RelativeLayout和同级的两个View要定义LinearLayout.LayoutParams
    • 最下面的3个View要定义RelativeLayout.LayoutParams
  • ViewGroup 类中会使用容器中得元素的 LayoutParams 来对其布局。

比如在 ViewGroup.java 中会看到这样的代码

ViewGroup及其包含View的XML属性_第4张图片
Screen Shot 2016-06-02 at 00.00.54.png

问题已经很明朗了,ViewGroup及其容器性质的继承类都定义一个LayoutParams嵌入类来给元素使用,这些都是布局性质的,所有都是用 layout_ 前缀打头,比如:

ViewGroup.LayoutParams:

Screen Shot 2016-06-02 at 00.07.16.png

ViewGroup. MarginLayoutParams

ViewGroup及其包含View的XML属性_第5张图片
Screen Shot 2016-06-02 at 00.07.25.png

而 ViewGroup 自己的 XML 属性是:

ViewGroup及其包含View的XML属性_第6张图片
Screen Shot 2016-06-02 at 00.10.59.png

再比如:

LinearLayout.LayoutParams

ViewGroup及其包含View的XML属性_第7张图片
Screen Shot 2016-06-02 at 00.12.04.png

而 LinearLayout 自己的 XML 属性是:

ViewGroup及其包含View的XML属性_第8张图片
Screen Shot 2016-06-02 at 00.12.37.png

从中可以看出:一个LinearLayout中的view元素, layout_gravity 是定义给 LinearLayout 用的, gravity 是定义给自己用的。

顺便也贴一下最近常用的 RecyclerView吧:

RecyclerView.LayoutParams:

Screen Shot 2016-06-02 at 00.15.10.png

没定义啥新的。

RecyclerView 自己的 XML 属性:

ViewGroup及其包含View的XML属性_第9张图片
Screen Shot 2016-06-02 at 00.15.43.png

也只是定义了一个新的,其他都是继承了 view.View 和 view.ViewGroup。

view.ViewGroup上面有贴图了,view.View 的 XML 属性就多了,这里查看.

你可能感兴趣的:(ViewGroup及其包含View的XML属性)