安卓基本布局

这里写图片描述

AbsoluteLayout

绝对布局,由自己制定控件在屏幕上的详细位置,开发难度大,已废弃。

LinearLayout

线性布局,最常用的布局,可以在布局内指定横向或者纵向排版。在开发中可以由在XML中布局在代码中加载,也可以直接由代码生成。

XML 形式 
1.主要属性
    <LinearLayout
    //必带属性 宽度 (具体数字  match_parent  wrap_content)
    android:layout_width="wrap_content"
    //必带属性 高度 (具体数字  match_parent  wrap_content)
    android:layout_height="wrap_content"
    //必带属性 排版类型 vertical 竖直方向  horizontal 水平方向
    android:orientation="vertical">
    //子控件。
    <View
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</LinearLayout>

android:id="@+id/string"//id属性,可以理解为布局的名称。在R文件中会生成一个唯一值。若XML文件中此ViewGroup是最外层view则可以通过XML文件名来找到该实例对象。

 android:background="@drawable/ic_launcher_background"//背景图像,值是drawable(包括自定义样式drawable文件中,图片map文件中,颜色vaules文件中)。

android:layout_weight="1"//在父布局中的权重或在父布局某方向的比例。值一般为数值,比例=值/同一层级的所有值之和,优先级在固定宽高和自适应值之后。

android:minHeight //最小高度
android:minWidth //最小宽度 

android:layout_margin //盒子模型中距离其他控件的距离,延伸属性有:layout_marginTop . layout_marginStart . layout_marginLeft . layout_marginBottom . layout_marginEnd . layout_marginRight . layout_marginHorizontal . layout_marginVertical 。

android:padding // View中内容和边框之间的距离。同样延伸属性有:paddingTop . paddingStart . paddingLeft . paddingBottom . paddingEnd . paddingRight . paddingHorizontal . paddingVertical 。

android:alpha //透明度。

android:visibility //显示状态  有gone不可见,不占位,invisible不可见,占位,visible 可见,占位三种值。

android:layout_gravity //在父容器内的位置(上下左右等)。

android:gravity //内容在本容器内的位置(上下左右等)。

更多属性:看到名称基本就可以了解用处了。
这里写图片描述
这里写图片描述
这里写图片描述

java代码形式:
    public LinearLayout(Context context);//构造器。
主要功能:
    作为ViewGroup最主要的是里面可以添加View,获取内部View。
 public void addView(View child)// ①
public void addView(View child, int index) //② 
public void addView(View child, int index, LayoutParams params)// ③ 
private void addViewInner(View child, int index, LayoutParams params, boolean preventRequestLayout)  // ④
添加View的方法,4是私有的,不管1,2,3最终都是通过4来添加View的。
public int indexOfChild(View child)//child在此容器的位置,如果不在此容器中,返回-1;
public int getChildCount() //返回该容器内的child数。
public View getChildAt(int index)//index位置的View。
大部分都是属性设置及获取方法,基本都是上面图片中的属性。

LinearLayout的线性布局可以解决一切问题,因为水平垂直两条线就组成了一个平面。但是需要更多的代码。比如我们可以建一个垂直布局的LinearLayout,往里面添加N个一样的TextView,看起来就像一个简单的ListView。但是却不能更好的控制。所以我们需要更多的容器类布局。

TableLayout

TableLayout是LinearLayout的子类,特殊属性有:
android:collapseColumns="1"//要隐藏的列 从0开始计数
android:shrinkColumns="1"//要收缩的列 从0开始计数
android:stretchColumns="1"//要拉伸的列 从0开始计数
基本模型:同样属性第0列可以收缩,第一列拉伸。表现出来的就不一样。

这里写图片描述

RelativeLayout

相对布局的关键点是找参照对象,在RelativeLayout中没有参照对象是无法布局的。默认在父容器左上角。

1、相对于父控件,例如:android:layout_alignParentTop=“true”
android:layout_alignParentTop      控件的顶部与父控件的顶部对齐;
android:layout_alignParentBottom  控件的底部与父控件的底部对齐;
android:layout_alignParentLeft      控件的左部与父控件的左部对齐;
android:layout_alignParentRight     控件的右部与父控件的右部对齐;
2、相对给定Id控件,例如:android:layout_above=“@id/**”
android:layout_above 控件的底部置于给定ID的控件之上;
android:layout_below     控件的底部置于给定ID的控件之下;
android:layout_toLeftOf    控件的右边缘与给定ID的控件左边缘对齐;
android:layout_toRightOf  控件的左边缘与给定ID的控件右边缘对齐;
android:layout_alignBaseline  控件的baseline与给定ID的baseline对齐;  
android:layout_alignTop        控件的顶部边缘与给定ID的顶部边缘对齐;
android:layout_alignBottom   控件的底部边缘与给定ID的底部边缘对齐;
android:layout_alignLeft       控件的左边缘与给定ID的左边缘对齐;
android:layout_alignRight      控件的右边缘与给定ID的右边缘对齐;

FrameLayout

1。帧布局或叫层布局,从屏幕左上角按照层次堆叠方式布局,后面的控件覆盖前面的控件。

2。主要用于展现的内容需要更多更明显的层次的应用,最明显的就是地图应用上的各种标记。

3 。他的操作类似于PS可以对各个部件进行操作,虽然他们看起来都在一个画面内,但是他们的层此事不想同的。

<FrameLayout
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:background="#dddddd">
        <TextView
            android:layout_width="150dp"
            android:layout_height="150dp"
            android:background="#ffffff"
            android:layout_gravity="center"
            android:visibility="visible" />
        <TextView
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:background="#aaaaaa"
            android:layout_gravity="center"
            android:visibility="visible" />
        <TextView
            android:layout_width="60dp"
            android:layout_height="60dp"
            android:background="#555555"
            android:layout_gravity="center"
            android:visibility="visible" />
        <TextView
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:background="#111111"
            android:layout_gravity="center"
            android:visibility="visible" />
    </FrameLayout>

每次添加控件都会在FrameLayout的最上层,所以控件的大小和位置就十分重要。他会覆盖下层的控件。IOS中有移动层级的方法,安卓貌似没有。
这里写图片描述

GridLayout

有多列的LinearLayout。在细节使用上略有差别,但是并不影响对他的使用。

从方法中可以看出,继承于ViewGroup的布局类的实质就是一个容器,不同于java中容器的是他们所装的对象不同,表现形式不同。

MARK

天地不仁,以万物为刍狗。圣人不仁,以百姓为刍狗。天地之间,其犹橐迭乎?虚而不屈,动而愈出 。多言数穷,不如守中     

猜你喜欢

转载自blog.csdn.net/joy_chow/article/details/80733934