API 23 widget.LinearLayout——属性分析
来源:互联网 发布:阶层的算法c语言 编辑:程序博客网 时间:2024/05/04 10:02
参阅:http://android.xsoftlab.net/reference/android/widget/LinearLayout.html
public class
LinearLayout
extends ViewGroup
Added in API level 1
java.lang.Object
↳android.view.View
↳ android.view.ViewGroup
↳ android.widget.LinearLayout
已知直接子类:
ActionMenuView
AppBarLayout
ListRowHoverCardView
ListRowView
NumberPicker
RadioGroup
SearchView
TabWidget
TableLayout
TableRow
TextInputLayout
ZoomControls
【概述】
布置子视图在一行或一列的布局。可以通过调用setOrintation()来设置布局方向。还可以指定重力,通过调用setGravity()指定所有子元素的对齐方式,或通过设置LinearLayout.LayoutParams的weight来指定特定的子视图来填充满剩余的布局空间。
布局方向默认是水平的。
LinearLayout是线性布局控件,它包含的子控件将以横向或竖向的方式排列,按照相对位置来排列所有的widgets或者其他的containers,超过边界时,某些控件将缺失或消失。
因此一个垂直列表的每一行只会有一个widget或者是container,而不管他们有多宽,而一个水平列表将会只有一个行高(高度为最高子控件的高度加上边框高度)。
LinearLayout保持其所包含的widget或者是container之间的间隔以及互相对齐(相对一个控件的右对齐、中间对齐或者左对齐)。
不换行属性: 线性布局中的组件不会自动换行,如果组件一个一个排列到尽头之后,剩下的组件就不会显示出来;
【嵌套类】
类LinearLayout.LayoutParams每个孩子与ViewLinearLayout相关的布局信息
LinearLayout.LayoutParams
android:layout_gravity
属性说明:表示组件自身在父组件中的位置。默认值left。
可以是以下一个或多个(用”|”分隔)常量:
top 将对象推送到其容器的顶部,而不更改其大小。
bottom 将对象推送到其容器的底部,而不更改其大小。
left 将对象推送到其容器的左侧,而不更改其大小。
right 将对象推送到其容器的右侧,而不更改其大小。
center 将对象放置在其容器的垂直和水平轴的中心,而不改变其大小。
center_vertical 将对象放置在其容器的垂直中心,而不改变其大小。
centet_horizontal 将对象放置在其容器的水平中心,而不改变其大小。
Fill 如果需要,增大对象的水平和垂直尺寸,以便它完全填充其容器。
fill_vertical 如果需要,增大对象的垂直尺寸,以便它完全填充其容器。
fill_horizontal 如果需要,增大对象的水平尺寸,以便它完全填充其容器。
clip_vertical 附加的可选设置,它可以设置容器内子对象的上下边缘裁剪它的容器边框。裁剪会基于垂直对齐的方式:顶部对齐的会
裁剪底部边缘,底部对齐的会裁剪顶部边缘,不会上下边缘都裁剪。
clip_horizontal 附加的可选设置,它可以设置容器内子对象的左右边缘裁剪它的容器边框。裁剪会基于水平对齐的方式:左对齐的会裁剪
右边缘,右对齐的会裁剪左边缘,不会左右边缘都裁剪。
start 将对象推送到其容器的起始处,而不更改其大小。
end 将对象推送到其容器的结尾处,而不更改其大小。
对应的全局属性资源符号是layout_gravity。
LinearLayout.LayoutParams
android:layout_weight
属性说明:设置组件的权重。表示组件在父控件剩余空间的占比。
必须是浮点值(float),如:1.2。
也可以引用一个包含此类型值的资源(格式:@[package:]type:name)或主题属性(格式:?[package][type:]name)。
对应的全局属性资源符号是layout_weight。
首先声明只有在Linearlayout中,该属性才有效。用于给一个线性布局中的诸多视图的重要程度赋值。所有的视图都有一个layout_weight值,默认为0。
在设置该属性的同时,(布局为水平方向时,)设置android:layout_width为wrap_content和match_parent会造成两种截然相反的效果。
android:layout_weight的真实含义是:一旦组件设置了该属性(假设有效的情况下),那么该组件的宽度等于原有宽度(android:layout_width)加上剩余空间的占比!
Google官方推荐,当使用weight属性时,将width设为0dip即可,效果跟设成wrap_content是一样的。这样weight就可以理解为占比了!
水平方向(当 android:orientation="vertical" 时),推荐设置android:layout_width="0dp";
垂直方向(当android:orientation="horizontal"时),推荐设置android:layout_height="0dp";
源码片段:
int delta = widthSize - mTotalLength;
int share = (int) (childExtra * delta / weightSum);
weightSum -= childExtra; //分配完成后,在总量里面减去已分配部分
delta-= share;
int childWidth = child.getMeasuredWidth() + share;
if (childWidth < 0) { childWidth = 0 ;}
(水平方向)剩余空间 = LinearLayout的宽度- 所有子view的layout_width的和
weight总和
【子view1】分配空间= 剩余空间*占比
子view宽度= layout_width + 分配空间
新剩余空间
新weight总和
【子view2】新分配空间= 新剩余空间*新的占比
子view宽度= layout_width + 新分配空间
LinearLayout.LayoutParams
继承自view.ViewGroup.MarginLayoutParams的xml属性
继承自view.ViewGroup.LoutParams的XML属性
【XML属性】
android:baselineAligned
关联方法:setBaselineAligned(booleanbaselineAligned)
属性说明:是否允许用户调整它内容的基准线。默认为true。
必须是布尔值(boolean),“true”或“false”。
也可以引用一个包含此类型值的资源(格式:@[package:]type:name)或主题属性(格式:?[package][type:]name)。
对应的全局属性资源符号是baselineAligned。
当设置为false时,防止布局对齐其子项的基线。 当孩子使用不同的重力值时,此属性特别有用。
在以字母为书写语言的其他国家非常常见。
示意图:
android:baselineAlignedChildIndex
关联方法:setBaselineAlignedChildIndex(int i)
属性说明:当线性布局是另一个基线对齐的布局的一部分时,它可以指定其子对象与基线对齐(即,哪个子TextView)。默认为0,当前LinearLayout作为其他layout的子View时,以该LinearLayout中哪个View
(TextView、Button、EditView)的基准线为对外基准线。
必须是整型值(integer),如:100。
也可以引用一个包含此类型值的资源(格式:@[package:]type:name)或主题属性(格式:?[package][type:]name)。
对应的全局属性资源符号是baselineAlignedChildIndex。
注意,用了baselineAlignedChildIndex就不要用类似android:layout_gravity="center_vertical"这种定位的代码了,因为会冲突,就不会出现我们想要的效果了。
android:divider
API 11以上,API11以下可使用ImageView添加
关联方法:setDividerDrawable(Drawable divider)
属性说明:设置drawable用作子View间的分隔线。
可以引用另一个资源(格式:@[package:]type:name)或主题属性(格式:?[package][type:]name)。
可以是颜色值(color),格式”#rgb”、”#argb”、”#rrggbb”、”#aarrggbb”。
对应的全局属性资源符号是divider。
需android:showDividers不为none时才会显示。
android:divider="@drawable/list_driver" 其中@drawable/list_driver是一个图片资源
android:divider="@drawable/@null" 不显示分隔线
API文档中未找到的属性
android:showDividers
API 11,需要和android:divider配合使用
关联方法:setShowDividers(int showDividers)
属性说明:设置在此布局中项目之间如何显示分隔。默认为none。
必须为下列常量值之一或多个(使用“|”分隔):
none 不显示
beginning 在LinearLayout开始处显示
middle 在LinearLayout的每两个组件间显示(常用)
end 在LinearLayout结尾处显示
对应的全局属性资料符号是showDividers。
API文档中未找到的属性
android:dividerPadding
API 11
关联方法:setDividerPadding(int padding)
属性说明:设置分割线两端到边界的距离。
必须是带单位的浮点型尺寸值(float),如:”14.5sp”。有效的单位包括:px(像素)、dp(密度无关像素)、sp(通常用于字体尺寸的可伸缩像素)、in(英寸)、mm(毫米)。
也可以引用一个包含此类型值的资源(格式:@[package:]type:name)或主题属性(格式:?[package][type:]name)。
对应的全局属性资源符号是dividerPadding。
android:gravity
关联方法:setGravity(int gravity)
属性说明:设置对象如何在X轴和Y轴上在自己的边界内定位其内容。默认值left。
必须是下列常量值中的一个或多个(用”|”分隔):
top 将对象推送到其容器的顶部,而不更改其大小。
bottom 将对象推送到其容器的底部,而不更改其大小。
left 将对象推送到其容器的左侧,而不更改其大小。
right 将对象推送到其容器的右侧,而不更改其大小。
center 将对象放置在其容器的垂直和水平轴的中心,而不改变其大小。
center_vertical 将对象放置在其容器的垂直中心,而不改变其大小。
centet_horizontal 将对象放置在其容器的水平中心,而不改变其大小。
fill 如果需要,增大对象的水平和垂直尺寸,以便它完全填充其容器。
fill_vertical 如果需要,增大对象的垂直尺寸,以便它完全填充其容器。
fill_horizontal 如果需要,增大对象的水平尺寸,以便它完全填充其容器。
clip_vertical 附加的可选设置,它可以设置容器内子对象的上下边缘裁剪它的容器边框。裁剪会基于垂直对齐的方式:顶部对齐的会
裁剪底部边缘,底部对齐的会裁剪顶部边缘,不会上下边缘都裁剪。
clip_horizontal 附加的可选设置,它可以设置容器内子对象的左右边缘裁剪它的容器边框。裁剪会基于水平对齐的方式:左对齐的会裁
剪右边缘,右对齐的会裁剪左边缘,不会左右边缘都裁剪。
start 将对象推送到其容器的起始处,而不更改其大小。
end 将对象推送到其容器的结尾处,而不更改其大小。
它对应的全局资源符号是gravity。
特殊情况:
当我们采用LinearLayout布局时,有以下特殊情况需要我们注意:
当 android:orientation="vertical" 时, android:layout_gravity只有水平方向的设置才起作用。
垂直方向的设置不起作用。即:left,right,center_horizontal是生效的。
当 android:orientation="horizontal"时, android:layout_gravity只有垂直方向的设置才起作
用,水平方向的设置不起作用。即:top,bottom,center_vertical是生效的。
比较特殊的是center,不管是横向还是纵向的时候,它总有一个方向起作用。
android:measureWithLargestChild
关联方法:setMeasureWithLargestChildEnabled(boolean enabled)
属性说明:该属性为true的时候,所有带权重的子元素都会具有最大子元素的最小尺寸。默认为false
如果为false,则所有儿童均正常测量。
必须是布尔值(boolean),“true”或“false”。
也可以引用一个包含此类型值的资源(格式:@[package:]type:name)或主题属性(格式:?[package][type:]name)。
对应的全局属性资源符号是measureWithLargestChild。
如果layout_width不是“wrap_content”,则measureWithLargestChild不起作用
所有带权重的view的宽和高将按照最大view的宽和高来布局。
该LinearLayout的宽和高为最大view的宽和高为基准乘以view的个数。
android:orientation="horizontal"时,计算宽;
android:orientation="vertical"时,计算高。
例:子view没设置权重时,那么子view的宽和高并不会变,但是LineraLayout的宽高会是最大宽和高乘以view的个数。
android:orientation
关联方法:setOrientation(int orientation)
属性说明:设置线性布局的布局方向。
必须是下列常量值之一:
horizontal水平方向(默认)
vertical垂直方向
对应的全局属性资源符号是orienntation。
android:weightSum
关联方法:setWeightSum(floa weightSum)
属性说明:设置weight总和的最大值。如果未指定该值,以所有子视图的layout_weight属性的累加值作为总和的最大值。
必须是浮点值(float),如:1.2。
也可以引用一个包含此类型值的资源(格式:@[package:]type:name)或主题属性(格式:?[package][type:]name)。
对应的全局属性资源符号是weightSum。
配合子视图的layout_weight使用。
【继承自view.ViewGroup的XML属性】
...
【继承自view.View的XML属性】
...
- API 23 widget.LinearLayout——属性分析
- API 25 (Android 7.1.1 API) widget.LinearLayout——属性分析
- API 23 widget.TextView——属性分析
- API 23 widget.AnalogClock——属性分析
- API 23 widget.ImageView——属性分析
- API 23 widget.ProgressBar——属性分析
- API 23 widget.Space——属性分析
- API 23 widget.RelativeLayout——属性分析
- API 23 widget.RelativeLayout.LayoutParams——属性分析
- API 23 widget.FrameLayout——属性分析
- API 25 (Android 7.1.1 API) widget.ImageView——属性分析
- API 25 (Android 7.1.1 API) widget.ProgressBar——属性分析
- API 25 (Android 7.1.1 API) widget.GridLayout——属性分析
- API 25 (Android 7.1.1 API) widget.AbsListView——属性分析
- API 25 (Android 7.1.1 API) widget.GridView——属性分析
- LinearLayout API 分析
- API 23 view.View——属性分析
- API 23 inputmethodservice.KeyboardView——属性分析
- 使用jsp的Form标签填写表单(自动返回提交值)
- Transpose File
- radio、checkbox样式修改
- RecycleView拖拽排序+侧滑删除+侧滑菜单
- 深入理解乐观锁与悲观锁
- API 23 widget.LinearLayout——属性分析
- linux挂载cdrom,并添加本地yum源和局域网yum源
- java程序员需要看的一些书~java程序猿进阶书籍~
- 社交聊天工具哪个比较好?
- 数据挖掘中最容易犯的十大错误
- oracle搜集(二)
- linq 其中之左脸查询
- PHPhoto
- 第十一周 OJ总结<5>-求两个整数的最大公约数和最小公倍数