美文网首页我爱编程
ViewGroup及其包含View的XML属性

ViewGroup及其包含View的XML属性

作者: wkevin27 | 来源:发表于2016-06-02 00:19 被阅读323次

首先解答这个问题:

<LinearLayout
    ......>

    <android.support.design.widget.TabLayout
        android:id="@+id/tablayout"
        android:layout_width="match_parent"
        android:layout_height="45dp"
        android:background="@color/blue"
        app:tabIndicatorColor="@color/white"
        app:tabSelectedTextColor="@color/gray"
        app:tabTextColor="@color/white">

</LinearLayout>

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

Screen Shot 2016-06-01 at 23.45.42.png

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

Screen Shot 2016-06-01 at 23.23.26.png

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

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 中会看到这样的代码

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

Screen Shot 2016-06-02 at 00.07.25.png

而 ViewGroup 自己的 XML 属性是:

Screen Shot 2016-06-02 at 00.10.59.png

再比如:

LinearLayout.LayoutParams

Screen Shot 2016-06-02 at 00.12.04.png

而 LinearLayout 自己的 XML 属性是:

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 属性:

Screen Shot 2016-06-02 at 00.15.43.png

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

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

相关文章

网友评论

    本文标题:ViewGroup及其包含View的XML属性

    本文链接:https://www.haomeiwen.com/subject/qtahdttx.html