美文网首页我爱编程
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