android常用布局详解「建议收藏」

android常用布局详解「建议收藏」view和布局在一个Android应用程序中,用户界面通过View和ViewGroup对象构建。Android中有很多种View和ViewGroup,他们都继承自View类。View对象是Android平台上表示用户界面的基本单元。View的布局显示方式直接影响用户界面,View的布局方式是指一组View元素如何布局,准确的说是一个ViewGroup中包含的一些View怎么样布局。ViewGr…

大家好,又见面了,我是你们的朋友全栈君。

view和布局

在一个Android应用程序中,用户界面通过View和ViewGroup对象构建。Android中有很多种View和ViewGroup,他们都继承自View类。View对象是Android平台上表示用户界面的基本单元。

View的布局显示方式直接影响用户界面,View的布局方式是指一组View元素如何布局,准确的说是一个ViewGroup中包含的一些View怎么样布局。ViewGroup类是布局(layout)和视图容器(View container)的基类,此类也定义了ViewGroup.LayoutParams类,它作为布局参数的基类,此类告诉父视图其中的子视图想如何显示.

在这里插入图片描述

LinearLayout 线性布局

线性布局是按照水平或垂直的顺序将子元素(可以是控件或布局)依次按照顺序排列,每一个元素都位于前面一个元素之后。
线性布局分为两种:水平方向和垂直方向的布局。分别通过属性android:orientation=“vertical” 和 android:orientation=”horizontal”来设置。

android:gravity:内部控件对齐方式,常用属性值有center、center_vertical、center_horizontal、top、bottom、left、right等。gravity可以设置两个,表示更精准的定位。

center:居中显示,这里并不是表示显示在LinearLayout的中心,当LinearLayout线性方向为垂直方向时,center表示水平居中,但是并不能垂直居中,此时等同于

center_horizontal的作用;同样当线性方向为水平方向时,center表示垂直居中,等同于center_vertical。

top、bottom、left、right顾名思义为内部控件居顶、低、左、右布局。

这里要与android:layout_gravity区分开,layout_gravity是用来设置自身相对于父元素的布局。

android:layout_weight
权重,用来分配当前控件在剩余空间的大小,如果你不设置,所有的视图都有一个layout_weight值,默认为零,意思是需要显示多大的视图就占据多大的屏幕空间。

正常情况下,值越大占据高度或宽度越大。例外的情况,在LineayLayout布局中使用这个属性时需要注意: 当水平方向布局且子控件的宽度为fill_parent或match_parent时,值越小占据宽度越大,垂直方向也一样。分析一下这种情况,类似这样的代码。因为设置为match_parent时候,layout_weight代表的是要给控件分配剩余空间,谁的权重大谁就会减去越多。

RelativeLayout

相对布局:是一个ViewGroup以相对位置显示它的子视图(view)元素,一个视图可以指定相对于它的兄弟视图的位置(例如在给定视图的左边或者下面)或相对于

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的右边缘对齐;

3、居中,例如:

android:layout_centerInParent=“true”

android:layout_centerHorizontal 水平居中;

android:layout_centerVertical 垂直居中;

android:layout_centerInParent 父控件的中央;

AbsoluteLayout

绝对布局也叫坐标布局,指定控件的绝对位置,简单直接,直观性强,但是手机屏幕尺寸差别较大,适应性差,Android 1.5已弃用,可以用RelativeLayout替代。

TableLayout

表格布局继承自LinearLayout,通过TableRow设置行,列数由TableRow中的子控件决定,直接在TableLayout中添加子控件会占据整个一行。

       <TableRow>
           <TextView
               android:layout_width="100dp"
               android:layout_height="100dp"
               android:layout_margin="5dp"
               android:background="#e2a617"
               android:text="小明"
               android:gravity="center"/>

           <TextView
               android:layout_width="100dp"
               android:layout_height="100dp"
               android:layout_margin="5dp"
               android:background="#0d637f"
               android:text="小张"
               android:gravity="center"/>

           <TextView
               android:layout_width="100dp"
               android:layout_height="100dp"
               android:layout_margin="5dp"
               android:background="#aa2266"
               android:text="小李"
               android:gravity="center"/>
       </TableRow>

        <TableRow>
            <TextView
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:layout_margin="5dp"
                android:background="#45e15f"
                android:text="小王"
                android:gravity="center"/>
            <TextView
                android:layout_width="200dp"
                android:layout_height="100dp"
                android:layout_margin="5dp"
                android:background="#3924a4"
                android:text="小孙"
                android:gravity="center"
                android:layout_span="2"/>
        </TableRow>

    </TableLayout>

除上面讲过之外常用的几个布局的属性:

(1)layout_margin

用于设置控件边缘相对于父控件的边距
android:layout_marginLeft
android:layout_marginRight
android:layout_marginTop
android:layout_marginBottom

(2) layout_padding

用于设置控件内容相对于控件边缘的边距

android:layout_paddingLeft
android:layout_paddingRight
android:layout_paddingTop
android:layout_paddingBottom

(3) layout_width/height
用于设置控件的高度和宽度wrap_content 内容包裹,表示这个控件的里面文字大小填充fill_parent 跟随父窗口match_parent

(4) gravity
用于设置View组件里面内容的对齐方式,控件内容的对齐方式
top bottom left right center等

(5) android:layout_gravity

用于设置Container组件相对于父布局的对齐方式

android:layout_alignTop 本元素的上边缘和某元素的的上边缘对齐
android:layout_alignLeft 本元素的左边缘和某元素的的左边缘对齐
android:layout_alignBottom 本元素的下边缘和某元素的的下边缘对齐
android:layout_alignRight 本元素的右边缘和某元素的的右边缘对齐

未完,,约束布局在路上。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/137131.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月2日 下午2:36
下一篇 2022年6月2日 下午2:46


相关推荐

  • c __cplusplus详解

    c __cplusplus详解

    2021年9月17日
    58
  • C多线程问题

    C多线程问题第一次在 winform 写多线程代码遇到很多问题 1 方法委托创建多线程后该方法就会往下执行 控制子线程执行完主线程再继续往下执行用到两种方法 可获取工作线程 最大工作线程时表示子线程都执行完成 使用信号量控制 曾经学操作系统时不知道有什么用 现在发现多线程通信过程信号量还是很重要的 2 winform 控件默认不允许非创建控件线程操作控件 只有多线程编程才会出现这个跨线程通信问题 解决办法

    2026年3月17日
    2
  • Java正則表達式入门

    Java正則表達式入门

    2021年12月1日
    68
  • 有限状态机详解(转载)

    有限状态机详解(转载)以前总觉得有限状态机和无限状态机非常的难理解 原来也就是自己一直没有一个直观的认识 今天看到一篇博客 总算对有限状态机入门了 一看就懂 转载地址 http blog csdn net zqixiao 09 article details 我们知道 一般编写程序时都要画出流程图 按照流程图结构来编程 如果编写一个比较繁琐 容易思维混乱的程序时 我们可以利用有限状态机模型画出一个状态

    2026年3月17日
    3
  • MyBatis一对多关联查询XMl配置写法

    MyBatis一对多关联查询XMl配置写法MyBatis 一对多关联查询 XMl 配置写法一 情景概述 1 有一张客户表 Client 存储客户信息 姓名 name 年龄 age 等 2 有一张客户附件表 client file 存储客户附件信息 附件名 name 路径 path 等 其中通过外键 client id 关联到 client 表 获取附件对应的

    2026年3月17日
    2
  • selenium3.0不用代理的情况下,获取异步请求的数据

    selenium3.0不用代理的情况下,获取异步请求的数据最近爬取一个网站的时候,反爬比较厉害,各种弹窗,各种验证码,无限debugger,关键数据是ajax请求异步加载的。使用代理绕过前面几种反爬后,获取ajax的request和response成了头疼的问题,最终使用selenium的network日志分析来解决。为了方便以后使用,写了一个工具类:importjsonfromseleniumimportwebdriverfromselenium.webdriverimportDesiredCapabilitiesdefget

    2022年7月26日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号