LinearLayout属性—weight与divider

LinearLayout-weight

LinearLayout-weight:按屏幕剩余空间,按权重分配空间(权重、百分比布局)
(1)当layoutout_height="0dp"

  • 剩余空间=(屏幕高度-2*0)=屏幕高度
  • 屏幕高度1/3+0= 1/3屏幕高度
  • 屏幕高度2/3+0= 2/3屏幕高度

(2)当layoutout_height="wrap_content"

  • 剩余空间=(屏幕高度-2*wrap_content)
  • (屏幕高度-2wrap_content)1/3+wrap_content
  • (屏幕高度-2wrap_content)2/3+wrap_content

思考:如果将layout_weight=2的控件权重改为layout_weight=200,layout_weight=1的控件是否会消失不见呢?不会的,因为当layout_height为wrap_content的时,layout_weight代表的是控件要优先尽可能的小,即weight值越小,控件所占的空间越小,但这个小是有限度的,即wrap_content,也就是內容还是要完整的展示出來,所以layout_weight=1的控件不会消失,并会完整的显示出来。

(3)当layouto_height="match_parent"

  • 剩余空间=(屏幕高度-2屏幕高度)=-1屏幕高度
  • -1屏幕高度1/3+屏幕高度= 2/3*屏幕高度
  • -1屏幕高度2/3+屏幕高度= 1/3*屏幕高度
    Paste_Image.png

思考:同样,如果将layout_weight=2的控件权重改为layout_weight=200,它是否会消失不见呢?此时在屏幕中就看不到layout_weight=2的控件了,它变成一个很小的横条,layout_weight=1的控件充满了整个屏幕。这是因为当layout_height为match_parent时,layout_weight代表的是控件要优先尽可能的大,即weight值越小,控件所占的空间越大,但这个大是有限度的,即match_parent。

总结:

  • 在layout_height设置为match_parent的時候,layout_weight所代表的是你的控件要优先尽可能的大,但这个大是有限度的,即match_parent( layout_width同layout_height );
  • 在layout_height设置为wrap_content的時候,layout_weight所代表的是你的控件要优先尽可能的小,但这个小是有限度的,即wrap_content(layout_width同layout_height );
  • 当没有设置 Layout_weight这个属性时,默认值是0。

将控件放在水平最右

1.Layout_gravity、gravity和layout_marginRight/layout_marginLeft区别
  • gravity
    对该view内容的限定。比如一个button上的text.,你可以设置该text在view的靠左,靠右等位置。以button为例,android:gravity="right"则button上面的文字靠右。
  • layout_marginRight/layout_marginLeft
    离某元素右边缘/左边缘的距离。
  • Layout_gravity
    设置该view相对与起父view 的位置。比如一个button 在Linearlayout里,你想把该button放在靠左、靠右等位置就可以通过该属性设置。以button为例,android:layout_gravity="right"则button靠右。

注意:在LinearLayout中,设置Layout_gravity属性:

  • 当android:orientation="vertical" 时, 只有水平方向的设置才起作用,垂直方向的设置不起作用,即:left,right,center_horizontal是生效的;
  • 当 android:orientation="horizontal" 时, 只有垂直方向的设置才起作用,水平方向的设置不起作用,即:top,bottom,center_vertical 是生效的。
2.控件水平靠右例子:
  • 两个控件靠右显示


<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="right" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="保存" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="清空" />
</LinearLayout>

- 水平方向中布置两个TextView一个左,一个右,此时借用LinearLayout的gravity、Layout_gravity属性等不能得到预想的结果,使用RelativeLayout的android:layout_alignParentRight属性能实现预期的结果。 

# LinearLayout-divider
在android3.0及后面的版本在LinearLayout里增加了个分割线:

android:divider="@drawable/shape"
android:showDividers="middle|beginning|end"

分割线如果是图片那就直接使用图片就行,如果要使用颜色就必须使用shape来显示,直接使用颜色或Color是没有用的。使用shape的时候要注意设置size属性不设置宽高分割线就不会显示出来,如果使用line那填充颜色只能使用stroke来显示颜色。
android:showDividers="end"属性使用要注意:在android6.0一下,画最后一条分割线时是画在最后一个Child下面的,当最后一个child设置为GONE,最后一条分割线就会画到linearLayout顶部去;在6.0以上就改为画到最后一个Visibility不为GONE的Child的下面了,具体分析见[这里](http://angeldevil.me/2015/12/29/LinearLayout%E5%9D%91%E7%88%B9%E7%9A%84showDividers%E5%B1%9E%E6%80%A7/)。
这里重点说下LinearLayout的虚线divider的使用以及遇到的问题。一般步骤如下:
###### 1.先在drawable目录下创建一个线line的shape文件
比如此divider_dash.xml文件代码:

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:right="5dp"
android:left="5dp">
<shape android:shape="line">

<stroke
android:width="1dp"
android:color="#E5E5E5"
android:dashGap="4dp"
android:dashWidth="3dp"/>

<size android:height="2dp" />
</shape>
</item>
</layer-list>

这里画线必须要注意是:
- 只能画水平线,画不了竖线;
- 线在整个形状区域中是居中显示的;
- 线左右两边会留有空白间距,线越粗,空白越大;
- 线的高度是通过stroke的android:width属性设置的;
- **size的height必须大于(等于都不行!)stroke的width,否则,线无法显示;**
- size的android:height属性定义的是整个形状区域的高度。

###### 2.然后在自己的布局文件中添加一个LinearLayout作为不同view的分割线

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:showDividers="middle"
android:divider="@drawable/divider_dash"
android:background="@android:color/white"
android:orientation="vertical" >

<TextView  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:text="经济舱" />  
 
<TextView  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:text="退改签说明" />   

</LinearLayout>

虚线画好了,布局设置好了,遗憾的是,上述的方法和代码也许在Android 3.0以下可以画出虚线,但在Android 3.0以上最新Android SDK设备上,代码在真机上跑起来,根本画不出虚线,画出的而是一条实线! 
究其根本原因,是因为在Android 3.0以上,Android系统在众多绘图操作时候默认开启了硬件加速,因此导致在最新的高版本Android系统上画dash gap line失效。解决方法主要有以下:
- 在Java代码中给LinearLayout调用setLayerType(View.LAYER_TYPE_SOFTWARE, null)
- 在LinearLayout的xml布局文件设置属性android:layerType="software"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容