# Android布局

Framelayout

  • 框架布局

    框架布局是用来占据屏幕一块区域来显示一个单一的item.通常,框架布局应该拥有单一的child view,因为很难去管理多个child view,当你去适配views防止这些child view 相互覆盖的时候.当然,你也可以添加多个children到框架布局中,通过控制他们的位置即框架布局分配gravity到每一个child view.

    通过layout_gravity设定位置.通过layout_margin来设置间距

     <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
         android:orientation="vertical" android:layout_width="match_parent"
         android:layout_height="match_parent">
         <TextView
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="居中"
             android:layout_gravity="center"/>
         <TextView
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="左边"
             android:layout_gravity="left"/>
         <TextView
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="距离顶部20dp,右边20dp"
             android:layout_marginTop="20dp"
             android:layout_marginLeft="20dp"
             android:layout_marginStart="20dp"/>
     </FrameLayout>  
    

AbsoluteLayout

  • 绝对布局(google不建议使用绝对布局)

能够使子View在某一个固定的位置.绝对布局缺乏灵活性,而且很难去维护相比于其他没有绝对位置的布局.

     <AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_x="100dp"
            android:layout_y="100dp"
            android:text="文本"
            />
    </AbsoluteLayout>

Relativelayout

  • 相对布局

布局位置可以根据周围相互关联的布局或者父布局来设置.

官方提示:

Note that you cannot have a circular dependency between the size of the RelativeLayout and the position of its children. For example, you cannot have a RelativeLayout whose height is set to WRAP_CONTENT and a child set to ALIGN_PARENT_BOTTOM.

不能用于一个循坏依赖的布局在相对布局尺寸和子布局之间.举个例子,当你Relativelayout的高度是WRAP_CONTENT,那么Relativelayout的尺寸是相对的,这个时候你设置子View 为ALIGN_PARENT_BOTTOM,也是依赖于父布局的底边的位置,这样是不行的.

在android系统版本在17级以下(包含17的时候)。使用measure会出现NULL异常情况,这个是一个BUG。原因是在RelativeLayout的控件使用在含有scrolling的时候,该含有scrolling的控件中计算空间大小的时候,没有使用MeasureSpec mode UNSPECIFIED的布局方式在RelativeLayout。自定义的控件则会尽可能的使用AT_MOST 来替换对齐方式。

如果你想解决这个问题有2个方法:

1.讲SDK的目标版本升级

2.将需要使用RelativeLayout的上层包一个LinearLayout即可.

  • 甲在乙的____边
属性 解释
Above 定义将元素的底边对齐另一个元素的顶边
BELOW 定义将元素的顶边对齐另一个元素的底边
  • 甲和乙对齐____边
属性 解释
align_baseline 定义将元素的基线对齐另一个元素的基线
align_bottom 定义将元素的底边对齐另一个元素的底边
align_left 定义将元素的左边对齐另一个元素的左边
align_right 定义将元素的右边对齐另一个元素的右边
align_top 定义将元素的顶边对齐另一个元素的顶边
  • 甲对齐父容器__边
属性 解释
align_parent_bottom 定义将元素的底边对齐父容器的底边
align_parent_left 定义将元素的左边对齐父容器的左边
align_parent_right 定义将元素的右边对齐父容器的右边
align_parent_top 定义将元素的顶边对齐父容器的顶边
  • 甲在容器__边
属性 解释
CENTER_HORIZONTAL 定义元素在RelativeLayout中水平居中
CENTER_IN_PARENT 定义元素在RelativeLayout的中心
CENTER_VERTICAL 定义元素在RelativeLayout内垂直居中
  • 甲的边对齐已的
属性 解释
LEFT_OF 甲元素的右边对齐乙元素的左边
RIGHT_OF 甲元素的左边对齐乙元素的右边

LinearLayout

  • 线性布局

A Layout that arranges its children in a single column or a single row. The direction of the row can be set by calling setOrientation(). You can also specify gravity, which specifies the alignment of all the child elements by calling setGravity() or specify that specific children grow to fill up any remaining space in the layout by setting the weight member of LinearLayout.LayoutParams. The default orientation is horizontal

一个可以将子元素分布到一列或者一行的布局.可以通过setOrientation来设置水平或者垂直方向.你也可以通过setGravity来确定重力方向.通过weight属性来设置元素在布局中占据的比例.

  • 线性布局中,Orientation和Gravity存在两条规则:

    当 android:orientation="vertical" 时, 只有水平方向的设置才起作用,垂直方向的设置不起作用。即:left,right,center_horizontal 是生效的。

    当 android:orientation="horizontal" 时, 只有垂直方向的设置才起作用,水平方向的设置不起作用。即:top,bottom,center_vertical 是生效的。

例子:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
        <TextView
            android:id="@+id/text1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="文本1"
            android:layout_gravity="end"
            />
        <TextView
            android:id="@+id/text2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="文本2"
            android:layout_gravity="center_horizontal"
          />
    </LinearLayout>

2:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
    android:id="@+id/text1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="文本1"
    android:layout_gravity="top"

    />
<TextView
    android:id="@+id/text2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="文本2"
    android:layout_gravity="bottom"
  />
</LinearLayout>
  • layout_gravity和gravity的区别

android:gravity是相对于自己的位置,如button中的text相对自己的位置.

android:layout_gravity是相对于布局的位置.如屏幕居中.

android:layout_gravity只在LinearyLayout和FrameLayout中有效.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容