精华内容
下载资源
问答
  • linearlayout和relativelayout
    2018-06-28 16:47:16

    其实关于这个问题,看了比较多的博客,看了比较多的分析,下面我总结一下,至于源码,网上很多,大家可以自行搜索。

    首先关于这两个布局,最开始我们创建布局,默认的是LineaLayout,后来创建布局,默认是RelativeLayout,从AS 2.2开始默认布局是ConstraintLayout。
    就算啥也不懂,也应该知道,IDE是GOOGLE推出的,自然而然就代表了人家谷歌的意思。九年义务教育就是这么优秀~

    相同的层及深度,两个布局的性能差距在measure, RelativeLayout > LinearLayout。
    原因: RelativeLayout会内的子View会调用两次onMeasure,分别是横向的和纵向的;LinearLayout分两种情况:如果没有Weight,就只关心orientation,子View测量一次,如果有Weight,子view也是测量两次;分别是先orientation,再是Weight。

    归根结底一个布局优先考虑步骤:层级深度 > RelativeLayout或者LinearLayout

    例子:相同的布局,一个RelativeLayout可以完成,但是要使用多个LinearLayout,肯定使用Relativelayout的,尽管会子view会测量两次,但是也比使用多个LinearLayout性能好多了。

    再比如:我们知道顶级的DecorView使用的是LinearLayout,因为已知层及深度,上面是标题,下面是内容,两种布局都能够使用,但是这时候就考虑到了两种布局的内在子view工作性能,选择了LinearLayout。

    更多相关内容
  • LinearLayout和RelativeLayout 1.LinearLayout 线性布局(LinearLayout)主要以水平或垂直方式来显示界面中的控件。当控件水平排列时,显示顺序依次为从左到右,当控件垂直排列时,显示顺序依次为从上到下。 2....

    LinearLayout和RelativeLayout
    1.LinearLayout
    线性布局(LinearLayout)主要以水平或垂直方式来显示界面中的控件。当控件水平排列时,显示顺序依次为从左到右,当控件垂直排列时,显示顺序依次为从上到下。
    2.RelativeLayout
    相对布局(RelativeLayout)是通过相对定位的方式指定控件位置,即以其它控件或父容器为参照物,摆放控件位置
    控件属性:
    在这里插入图片描述
    在这里插入图片描述

    垂直排列在这里插入图片描述

    水平排列在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • Android的LinearLayout和RelativeLayout以及常用的控件

    1. Android的基础布局

    LinearLayout 线性布局

    RelativeLayout 相对布局

    TableLayout 表格布局

    FrameLayout 帧布局(框架布局)

    ConstrantLayout 约束布局 (Android Studio默认布局) 用于拖拽的

    2. LinearLayout 线性布局

    2.1 怎么将Android Studio默认的ConstrantLayout改为LinearLayout

    1. 在design页面下->component tree->ConstrainLayout右键->Convert view...->选择LinearLayout 点击apply


    2. 在code页面下->直接修改代码 将 androidx.constraintlayout.widget.ConstraintLayout  改为 LinearLayout

    2.2 线性布局有两种:

    1. 水平的线性布局 所有控件都是水平挨个排布

      如果没有android:orientation属性的存在

      或者

      android:orientation="horizontal"

    2. 垂直的线性布局 所有控件都是垂直挨个排布

      android:orientation="vertical"

            在android中,所有在页面上显示的东西,必须具备两个属性,这两个属性是宽和高

            android:layout_width 宽度

            android:layout_height 高度

    2.3 比重:

    android:layout_weight 
    如何算总比重:  看同一父亲且同一级的各个控件的weight 一旦weight属性生效,android:layout_width失效
    
    

    2.4 布局排布:

    android:gravity                     内容位置改变

    android:layout_gravity             本身位置改变 

    2.5 分隔线:内部的线

    android:divider="@color/black"
    android:showDividers="middle"

    2.6 嵌套线性布局结构

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            
        </LinearLayout>
        
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
        
        </LinearLayout>
    
    </LinearLayout>

    3. RelativeLayout相对布局

    3.1 属性

     相对于兄弟元素

    属性名称  属性含义  
    android:layout_below="@id/aaa"在指定View的下方
    android:layout_above="@id/aaa"  在指定View的上方
    android:layout_toLeftOf="@id/aaa"在指定View的左边
    android:layout_toRightOf="@id/aaa"在指定View的右边
    android:layout_alignTop="@id/aaa"与指定View的上边界一致
    android:layout_alignBottom="@id/aaa"与指定View下边界一致
    android:layout_alignLeft="@id/aaa"与指定View的左边界一致
    android:layout_alignRight="@id/aaa"与指定View的右边界一致

    3.2 属性

    • 相对于兄弟元素

    属性名称属性含义
    android:layout_alignParentLeft="true"在父元素内左边
    android:layout_alignParentRight="true"在父元素内右边
    android:layout_alignParentTop="true"在父元素内顶部
    android:layout_alignParentBottom="true"在父元素内底部

    • 对齐方式

    • 属性名称属性含义
      android:layout_centerInParent="true"居中布局
      android:layout_centerVertical="true"垂直居中布局
      android:layout_centerHorizontal="true"水平居中布局

    • 间隔

    属性名称属性含义
    android:layout_marginBottom=""离某元素底边缘的距离
    android:layout_marginLeft=""离某元素左边缘的距离
    android:layout_marginRight =""离某元素右边缘的距离
    android:layout_marginTop=""离某元素上边缘的距离
    android:layout_paddingBottom=""往内部元素底边缘填充距离
    android:layout_paddingLeft=""往内部元素左边缘填充距离
    android:layout_paddingRight =""往内部元素右边缘填充距离
    android:layout_paddingTop=""往内部元素右边缘填充距离

    3.3 代码实现

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity3">
    
        <Button
            android:id="@+id/button4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:text="中" />
    
        <Button
            android:id="@+id/button5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/button4"
            android:layout_alignStart="@+id/button4"
            android:layout_marginTop="20dp"
            android:text="下" />
    
        <Button
            android:id="@+id/button6"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_above="@+id/button4"
            android:layout_alignStart="@+id/button4"
            android:layout_marginBottom="20dp"
            android:text="上" />
    
        <Button
            android:id="@+id/button7"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toStartOf="@+id/button4"
            android:layout_alignTop="@+id/button4"
            android:layout_marginEnd="20dp"
            android:text="左" />
    
        <Button
            android:id="@+id/button8"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@id/button4"
            android:layout_alignTop="@id/button4"
            android:layout_marginStart="20dp"
            android:text="右" />
    
    </RelativeLayout>

     

    4. 常用的控件

    TextView 文本控件 给用户一个文字性的提示

    EditText 输入文本控件

    ImageView 图片控件 显示图片

    Button 按钮

    TextView

    常用属性

    属性名作用
    id为TextView设置一个组件id,根据id,我们可以在Java代码中通过findViewById()的方法获取到该对象,然后进行相关属性的设置
    layout_width组件的宽度
    layout_height组件的高度
    gravity设置控件中内容的对齐方向,TextView中是文字,ImageView中是图片等等
    text设置显示的文本内容,一般我们是把字符串写到string.xml文件中,然后通过@String/xxx取得对应的字符串内容的
    textColor设置字体颜色,同上,通过colors.xml资源来引用
    textStyle设置字体风格,三个可选值:normal(无效果),bold(加粗),italic(斜体)
    textSize字体大小,单位一般是用sp
    background控件的背景颜色,可以理解为填充整个控件的颜色,可以是图片
    autoLink识别链接类型 (web, email, phone ,map ,none, all)

    文本设置边框

    在drawable里面创建一个xml文件编写矩形边框的Drawable:

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android">
      <!-- 设置一个黑色边框 -->
      <stroke android:width="2px" android:color="#000000"/>
      <!-- 渐变 -->
      <gradient
        android:angle="270"
        android:endColor="#C0C0C0"
        android:startColor="#FCD209" />
      <!-- 设置一下边距,让空间大一点 -->
      <padding
        android:left="5dp"
        android:top="5dp"
        android:right="5dp"
        android:bottom="5dp"/>
    </shape>
    
    编写圆角矩形边框的Drawable
    
    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android">
      <!-- 设置透明背景色 -->
      <solid android:color="#87CEEB" />
      <!-- 设置一个黑色边框 -->
      <stroke
        android:width="2px"
        android:color="#000000" />
      <!-- 设置四个圆角的半径 -->
      <corners
        android:bottomLeftRadius="10px"
        android:bottomRightRadius="10px"
        android:topLeftRadius="10px"
        android:topRightRadius="10px" />
      <!-- 设置一下边距,让空间大一点 -->
      <padding
        android:bottom="5dp"
        android:left="5dp"
        android:right="5dp"
        android:top="5dp" /> 
    </shape>

     带图片(drawableXxx)的TextView

    属性名作用
    android:drawableLeft文本左边设置图片
    android:drawableRight文本右边设置图片
    android:drawableBottom文本下边设置图片
    android:drawableTop文本上边设置图片

    代码案例

            

    android:id="@+id/textView"
    
    android:layout_width="wrap_content"
    
    android:layout_height="wrap_content"
    
    android:layout_centerInParent="true"
    
    android:drawableTop="@drawable/head_image"
    
    android:drawableLeft="@drawable/head_image"
    
    android:drawableRight="@drawable/head_image"
    
    android:drawableBottom="@drawable/head_image"
    
    android:padding="10dp"
    
    android:text="头像"/>
    

    展开全文
  • 官方文档 由上面的官方文档,我们可以看出,两个布局方式的相同,都是继承自View.Group,是一种容器控件,LinearLayout的布局层次比较简单,方向位置都比较容易控制,而相对布局RelativeLayout 对于其内子控件...


    一、前期基础知识储备

    上,官方文档

     


     

     

    由上面的官方文档,我们可以看出,两个布局方式的相同,都是继承自View.Group,是一种容器控件,LinearLayout的布局层次比较简单,方向和位置都比较容易控制,而相对布局RelativeLayout 对于其内子控件提供了更加丰富的布局层次和布局位置。

    二、两者在属性上的异同点

    共有属性:
    java代码中通过btn1关联次控件
    android:id="@+id/btn1"
    
    控件宽度
    控件高度
    控件排布
    
    控件间距
    android:layout_marginLeft="5dip" //距离左边
    android:paddingLeft="5dip"
    
    
    控件显示位置
    android:gravity="center" //left,right, top, bottom
    android:gravity="center_horizontal"
    android:gravity是本元素所有子元素的重力方向。
    android:layout_gravity属性则设置控件本身相对于父控件的显示位置
    
    TextView中文本字体
    
    定义控件是否可见
    
    定义背景图片
    android:background="@drawable/img_bg" //img_bg为drawable下的一张图片
    
    seekbar控件背景图片及最大值
    android:progressDrawable="@drawable/seekbar_img" 
    android:thumb="@drawable/thumb"     
    android:max = "60"
    android:layout_alignWithParentIfMissing="true"
    
    仅仅在RelativeLayout中有效:
    在父亲布局的相对位置
    android:layout_alignParentLeft="true" //在布局左边
    
    在某个控件的相对位置
    android:layout_toRightOf="@id/button1" //在控件button1的右边,不仅仅是紧靠着
    
    定义和某控件对齐
    android:layout_alignTop=”@id/button1” //和控件button1上对齐
    
    android:layout_centerHorizontal="true"   //水平居中
    
    仅仅在LinearLayout中有效
    设置控件在一排或一列中所占比例值
    android:layout_weight="1"

    注:android:gravity 和 android:layout_gravity 的区别

    android:gravity 是设置该view里面的内容相对于该view的位置,例如设置button里面的text相对于view的靠左,居中等位置。(也可以在Layout布局属性中添加,设置Layout中组件的位置)。

    android:layout_gravity 是用来设置该view相对与父view的位置,例如设置button在layout里面的相对位置:屏幕居中,水平居中等。

    android:gravity用于设置View中内容相对于View组件的对齐方式,而android:layout_gravity用于设置View组件相对于Container的对齐方式。说的再直白点,就是android:gravity只对该控件内的东西有效,android:layout_gravity只对控件自身有效。

    三、两者在性能上的对比

    通过网上的很多实验结果我们得之,两者绘制同样的界面时layout和draw的过程时间消耗相差无几,关键在于measure过程RelativeLayout比LinearLayout了一些。我们知道ViewGroup是没有onMeasure方法的,这个方法是交给子类自己实现的。因为不同的ViewGroup子类布局都不一样,那么onMeasure索性就全部交给他们自己实现好了。

    1) RelativeLayout慢于LinearLayout是因为它会让子View调用2次measure过程,而后者只需一次,但是有weight属性存在时,后者同样会进行两次measure。

    2) RelativeLayout的子View如果高度RelativeLayout不同,会引发效率问题,可以使用padding代替margin以优化此问题。

    3) 在不响应层级深度的情况下,使用Linearlayout而不是RelativeLayout。

    据此,说明两个常见的,暂时没有引起注意的事情:

    ①作为顶级View的DecorView却是个垂直方向的LinearLayout,上面是标题栏,下面是内容栏,我们常用的setContentView()方法就是给内容栏设置布局。采用RelativeLayout并不会降低层级深度,因此这种情况下使用LinearLayout效率更高。

    ②为开发者默认新建RelativeLayout是希望开发者能采用尽量少的View层级,很多效果是需要多层LinearLayout的嵌套,这必然不如一层的RelativeLayout性能更好。因此我们应该尽量减少布局嵌套,减少层级结构,使用比如viewStub,include等技巧。可以进行较大的布局优化。


    展开全文
  • 1.LinearLayout 线性布局(LinearLayout)主要以水平或垂直方式来显示界面中的控件。当控件水平排列时,显示顺序依次为从左到右,当控件垂直排列时,显示顺序依次为从上到下。 通过android:orientation属性指定了...
  • Android开发——LinearLayout和RelativeLayout的性能对比

    万次阅读 多人点赞 2016-11-05 20:38:33
    0.前言我们都知道新建一个Android项目自动生成的Xml布局文件的根节点默认是RelativeLayout,这不是IDE默认设置,而是由android-sdk\tools\templates\activities\EmptyActivity\root\res\layout\activity_simple.xml....
  • 数据显示无论使用 RelativeLayout 还是 LinearLayout,layout draw 的过程两者相差无几,考虑到误差的问题,几乎可以认为两者相差无几,关键是 Measure 的过程 RelativeLayout 却比 LinearLayout 慢了一大截。...
  • LinearLayout和RelativeLayout 共有属性: java代码中通过btn1关联次控件 android:id="@+id/btn1" 控件宽度 android:layout_width="80px" //"80dip"或"80dp" android:layout_width =“wrap_content” ...
  • Android LinearLayout和RelativeLayout 详解

    千次阅读 2022-01-02 23:51:20
    两者的共有属性: 控件间距: ...仅RelativeLayout有效地属性: Android:layout_alignParentLeft="true" //在布局的左边 Android:layout_toRightOf="@id/button1" //在控件button1的右边,不仅仅是紧靠着 And
  • 抛开上面的比较,这并不是我今天想表达的东西,上面我也说了,LinearLayout和RelativeLayout在性能上的差距是微乎其微的,完全可以忽略,我们完全没有必要在比较RelativeLayout和LinearLayout上费劲力气。...
  • 在平时设计UI时,相信大多数人用得比较多的布局就是LinearLayout和RelativeLayout了,毕竟这两种布局能实现我们一般的需求。还记得刚开始学Android时,使用Eclipse进行开发,每次新建一个布局文件,该布局文件默认...
  • LinearLayoutRelativeLayout的区别

    千次阅读 2018-10-27 17:22:24
    RelativeLayout:是相对布局,允许子元素指定以相对于父元素或兄弟元素的位置,这是实际布局中最常用的方式之一。它灵活性大、属性多、难操作,子元素之间产生冲突的可能性也大。 如:layout_weight="1"仅...
  • 写的比较粗糙,初学android,凑凑合合,马马虎虎的看吧 ...<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_wi
  • 主要介绍了Android应用的LinearLayout中嵌套RelativeLayout的布局用法,文后还给出了线性布局中一些组件位置的调试经验,需要的朋友可以参考下
  • LinearLayout和RelativeLayout实现精确布局-简单版 类似与应用评价
  • 很多开发者一听说Android终端的屏幕尺寸...好在Android提供了另一套解决方案来应对严重的终端碎片化,这就是布局9-patch。 这里想来说说布局,在Android SDK刚刚问世的时候,Android提供了AbsoluteLayout,Fra
  • LinearLayoutRelativeLayout混合用
  • 人们说估计使用RelativeLayout而不是LinearLayout,因为LinearLayoutrelativeLayout多测量一次,事实上是这样吗?我们来详细看看 1、LinearLayout 有两种模式,VERTICALHORIZONTAL所以也有两种测量方式 @...
  • linearlayout和RelativeLayout在都属于viewgroup,view的绘制过程分为三部分:测量 measure,布局 layout , 绘制 draw 他们的在布局绘制方面比较接近,在测量方面RelativeLayoutlinearlayout慢。 为什么?源码...
  • LinearLayout性能优于RelativeLayout 在源码当中,由于RelativeLayout是相对布局,布局之间相互依赖,所以当测量完横向布局的时候,还需要进行一次纵向布局的测量,才能最终获得布局的大小,但是LinearLayout由于...
  • 1.线性布局LinearLayout LinearLayout是最常用的布局。顾名思义,LinearLayout下面的子视图就像用...LinearLayout除了继承View/ViewGroup类的所有属性方法外,还有其特有的XML属性。 orientation:指定线性布局...
  • LinearLayout和RelativeLayout 1.LinearLayout 线性布局(LinearLayout)主要以水平或垂直方式来显示界面中的控件。当控件水平排列时,显示顺序依次为从左到右,当控件垂直排列时,显示顺序依次为从上到下。 2....
  • Android中LinearLayout和RelativeLayout使用详解  1、 首先我们来看一下LinearLayoutRelativeLayout布局属性对比:  共有属性: 控件名称 android:id=”@+id/btn1″ 控件宽度 android:layout_...
  • 在ANDROID 开发中,有时候我们需要在后台动态添加布局文件,这里我们来说一下后台添加LinerLayout布局和RelativeLayout文件的方式:   LinearLayout 布局:  故名思义,线性布局,组件以垂直或水平方向...
  • linearLayout relativeLayout的属性区别

    千次阅读 2013-01-09 20:11:58
    LinearLayout和RelativeLayout 共有属性: java代码中通过btn1关联次控件 android:id="@+id/btn1" 控件宽度 android:layout_width="80px" //"80dip"或"80dp" android:layout_width =“wrap_content” ...
  • LinearLayout和RelativeLayout性能对比-百度RelativeLayout会让子View调用2次onMeasure,LinearLayou

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 74,439
精华内容 29,775
关键字:

linearlayout和relativelayout