Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
门心叼龙
flexbox-layout
提交
f49e30a1
F
flexbox-layout
项目概览
门心叼龙
/
flexbox-layout
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
flexbox-layout
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
f49e30a1
编写于
6月 01, 2016
作者:
T
Takeshi Hagikura
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #56 from google/check_size_constraints
Adds a check for size constraints violations
上级
1d0641ff
c6ec00d7
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
47 addition
and
22 deletion
+47
-22
flexbox/src/main/java/com/google/android/flexbox/FlexboxLayout.java
...c/main/java/com/google/android/flexbox/FlexboxLayout.java
+47
-22
未找到文件。
flexbox/src/main/java/com/google/android/flexbox/FlexboxLayout.java
浏览文件 @
f49e30a1
...
...
@@ -480,19 +480,14 @@ public class FlexboxLayout extends ViewGroup {
+
lp
.
bottomMargin
,
lp
.
height
);
child
.
measure
(
childWidthMeasureSpec
,
childHeightMeasureSpec
);
// Check the minimum constraint after the first measurement for the child
// To prevent the child's width becomes less than the value of minWidth
// Check the size constraint after the first measurement for the child
// To prevent the child's width/height violate the size constraints imposed by the
// {@link LayoutParams#minWidth}, {@link LayoutParams#minHeight},
// {@link LayoutParams#maxWidth} and {@link LayoutParams#maxHeight} attributes.
// E.g. When the child's layout_width is wrap_content the measured width may be
// less than the min width after the first measurement.
if
(
child
.
getMeasuredWidth
()
<
lp
.
minWidth
)
{
child
.
measure
(
MeasureSpec
.
makeMeasureSpec
(
lp
.
minWidth
,
MeasureSpec
.
EXACTLY
),
MeasureSpec
.
makeMeasureSpec
(
child
.
getMeasuredHeight
(),
MeasureSpec
.
EXACTLY
));
}
else
if
(
child
.
getMeasuredWidth
()
>
lp
.
maxWidth
)
{
child
.
measure
(
MeasureSpec
.
makeMeasureSpec
(
lp
.
maxWidth
,
MeasureSpec
.
EXACTLY
),
MeasureSpec
.
makeMeasureSpec
(
child
.
getMeasuredHeight
(),
MeasureSpec
.
EXACTLY
));
}
checkSizeConstraints
(
child
);
childState
=
ViewCompat
.
combineMeasuredStates
(
childState
,
ViewCompat
.
getMeasuredState
(
child
));
largestHeightInRow
=
Math
.
max
(
largestHeightInRow
,
...
...
@@ -572,6 +567,7 @@ public class FlexboxLayout extends ViewGroup {
childState
);
}
/**
* Sub method for {@link #onMeasure(int, int)} when the main axis direction is vertical
* (either from top to bottom or bottom to top).
...
...
@@ -635,19 +631,14 @@ public class FlexboxLayout extends ViewGroup {
+
lp
.
bottomMargin
,
childHeight
);
child
.
measure
(
childWidthMeasureSpec
,
childHeightMeasureSpec
);
// Check the minimum constraint after the first measurement for the child
// To prevent the child's height becomes less than the value of minHeight
// Check the size constraint after the first measurement for the child
// To prevent the child's width/height violate the size constraints imposed by the
// {@link LayoutParams#minWidth}, {@link LayoutParams#minHeight},
// {@link LayoutParams#maxWidth} and {@link LayoutParams#maxHeight} attributes.
// E.g. When the child's layout_height is wrap_content the measured height may be
// less than the min height after the first measurement.
if
(
child
.
getMeasuredHeight
()
<
lp
.
minHeight
)
{
child
.
measure
(
MeasureSpec
.
makeMeasureSpec
(
child
.
getMeasuredWidth
(),
MeasureSpec
.
EXACTLY
),
MeasureSpec
.
makeMeasureSpec
(
lp
.
minHeight
,
MeasureSpec
.
EXACTLY
));
}
else
if
(
child
.
getMeasuredHeight
()
>
lp
.
maxHeight
)
{
child
.
measure
(
MeasureSpec
.
makeMeasureSpec
(
child
.
getMeasuredWidth
(),
MeasureSpec
.
EXACTLY
),
MeasureSpec
.
makeMeasureSpec
(
lp
.
maxHeight
,
MeasureSpec
.
EXACTLY
));
}
checkSizeConstraints
(
child
);
childState
=
ViewCompat
.
combineMeasuredStates
(
childState
,
ViewCompat
.
getMeasuredState
(
child
));
largestWidthInColumn
=
Math
.
max
(
largestWidthInColumn
,
...
...
@@ -686,6 +677,40 @@ public class FlexboxLayout extends ViewGroup {
childState
);
}
/**
* Checks if the view's width/height don't violate the minimum/maximum size constraints imposed
* by the {@link LayoutParams#minWidth}, {@link LayoutParams#minHeight},
* {@link LayoutParams#maxWidth} and {@link LayoutParams#maxHeight} attributes.
*
* @param view the view to be checked
*/
private
void
checkSizeConstraints
(
View
view
)
{
boolean
needsMeasure
=
false
;
LayoutParams
lp
=
(
LayoutParams
)
view
.
getLayoutParams
();
int
childWidth
=
view
.
getMeasuredWidth
();
int
childHeight
=
view
.
getMeasuredHeight
();
if
(
view
.
getMeasuredWidth
()
<
lp
.
minWidth
)
{
needsMeasure
=
true
;
childWidth
=
lp
.
minWidth
;
}
else
if
(
view
.
getMeasuredWidth
()
>
lp
.
maxWidth
)
{
needsMeasure
=
true
;
childWidth
=
lp
.
maxWidth
;
}
if
(
childHeight
<
lp
.
minHeight
)
{
needsMeasure
=
true
;
childHeight
=
lp
.
minHeight
;
}
else
if
(
childHeight
>
lp
.
maxHeight
)
{
needsMeasure
=
true
;
childHeight
=
lp
.
maxHeight
;
}
if
(
needsMeasure
)
{
view
.
measure
(
MeasureSpec
.
makeMeasureSpec
(
childWidth
,
MeasureSpec
.
EXACTLY
),
MeasureSpec
.
makeMeasureSpec
(
childHeight
,
MeasureSpec
.
EXACTLY
));
}
}
private
void
addFlexLineIfLastFlexItem
(
int
childIndex
,
int
childCount
,
int
paddingToAdd
,
FlexLine
flexLine
)
{
if
(
childIndex
==
childCount
-
1
&&
flexLine
.
itemCount
!=
0
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录