在android布局中使用layout_weight的几点技巧和说明layout_weight
2015-09-25 18:44
781 查看
layout_weight的使用情形
在开发android应用程序时,经常需要根据不同的宽度来等分某个线性布局,使得在这个区域中,几个view按照一定的比例来排列,一般等分比较常见。以等宽举例说明:
由于一套布局需要适配多种不同型号的android机器,因此在布局文件中将view尺寸写死是一种下下之策,这时,layout_weight就派上了用场。
布局文件关键代码如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:id="@+id/button1" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:background="#44555555" android:gravity="center" android:text="1" /> <Button android:id="@+id/button2" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:background="#66555555" android:gravity="center" android:text="2" /> <Button android:id="@+id/button3" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:background="#88555555" android:gravity="center" android:text="3" /> <Button android:id="@+id/button4" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:background="#aa555555" android:gravity="center" android:text="4" /> <View android:id="@+id/view" android:layout_width="0dip" android:layout_height="10dip" android:layout_weight="1" android:background="#aa550000" /> </LinearLayout>
显示效果如下:
四个按钮以及最右侧view的layout_weight均为1
外层的LinearLayout默认的是水平方向布局,因此,当在这种ViewGroup布局中添加children时,若想使得children宽度一致或者按照比例显示,那么需要添加两行代码:
android:layout_width="0dip" android:layout_weight="1"
同理,如果是纵向排列的linearlayout布局,则需要使用
android:layout_height="0dip" android:layout_weight="1"
这样children就会在纵向按照等高排列。
有时候会遇到这样的需求:动态的隐藏第2个button,同时让右侧的view向左侧对齐,但宽度与原来设定的一致。
当仅仅gone掉第2个button,会出现下面的效果
这时,所有的button会重新刷新并进行layout,button2是消失了,但是其他控件的宽度也改变了,这是因为gone掉的view不占空间,整个横向排列的总weight减一,在每个控件的layout_weight值不变的情况下,所占比重均增加了,不符合需求。
那么将button2设置为invisible可以吗?同样不符合需求,invisible的view是看不到的,但是仍然与原来占据同样的空间。
一种解决方案:在最右侧添加一个view,即上图的红色区域。为了演示方便,我将view的高度设定位10dip,如果不想显示此view,可以将高度设为0dip,这样,由于这个view
宽度不为0,因此会占据着一定空间。
当隐藏第2个button时,使用如下代码,调整最右侧view的weight,从而重新调整布局文件
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0, 0); params.weight = 2; view.setLayoutParams(params);
效果如图:
代码说明:
LinearLayout.LayoutParams(0, 0);
传入的这两个参数分别为想要修改后的控件宽度和高度,由于需要设置weight参数,因此必须要将宽度设置为0.
相关文章推荐
- 【Android】 从头搭建视频播放器(4)——屏幕旋转处理
- android的WindowManager.addView弹窗添加
- android-support-v7 问题 解决
- android bitmap 平铺
- 深入Android 'M' Doze
- Android常用工具类
- Android 通过resource名称或者layout中定义的id name 去获取R.java中id,得到控件
- android中反射机制
- android异步任务详解 AsynTask
- Android之DiskLruCache(缓存工具)
- Android高效加载大图、多图解决方案,有效避免程序OOM
- android json解析(fastjson,Gson等)
- Android瀑布流照片墙实现,体验不规则排列的美感
- Android动画之translate(位移动画)
- android fastjson
- 【Android】多功能二维码实现思路,自动连接WI-FI
- Android应用是否可以只有一个Service或Broadcast Reciver,而没有Activity?
- 【Android】 从头搭建视频播放器(3)——手势检测 & 控制
- Android -- Properties使用
- android模拟器中关闭应用进程