-
onLayout方法是ViewGroup中子View的布局方法,用于放置子View的位置。放置子View很简单,只需在重写onLayout方法,然后获取子View的实例,调用子View的layout方法实现布局。在实际开发中,一般要配合onMeasure测量方法一起使用。
onLayout方法:
1.
@Override
2.
protected
abstract
void
onLayout(
boolean
changed,
3.
int
l,
int
t,
int
r,
int
b);
layout方法:
1.
public
void
layout(
int
l,
int
t,
int
r,
int
b);
平常开发所用到RelativeLayout、LinearLayout、FrameLayout...这些都是继承ViewGroup的布局。这些布局的实现都是通过都实现ViewGroup的onLayout方法,只是实现方法不一样而已。
下面是一个自定义ViewGroup的Demo,用onLayout和layout实现子View的水平放置,间隔是20px
01.
public
class
MyViewGroup
extends
ViewGroup {
02.
03.
// 子View的水平间隔
04.
private
final
static
int
padding =
20
;
05.
06.
public
MyViewGroup(Context context, AttributeSet attrs) {
07.
super
(context, attrs);
08.
// TODO Auto-generated constructor stub
09.
}
10.
11.
@Override
12.
protected
void
onLayout(
boolean
changed,
int
l,
int
t,
int
r,
int
b) {
13.
// TODO Auto-generated method stub
14.
15.
// 动态获取子View实例
16.
for
(
int
i =
0
, size = getChildCount(); i < size; i++) {
17.
View view = getChildAt(i);
18.
// 放置子View,宽高都是100
19.
view.layout(l, t, l +
100
, t +
100
);
20.
l +=
100
+ padding;
21.
}
22.
23.
}
24.
25.
}
Activity的XML布局:01.
<RelativeLayout xmlns:android=
"http://schemas.android.com/apk/res/android"
02.
xmlns:tools=
"http://schemas.android.com/tools"
03.
android:layout_width=
"match_parent"
04.
android:layout_height=
"match_parent"
05.
android:padding=
"10dp"
>
06.
07.
<com.example.layout.MyViewGroup
08.
android:layout_width=
"match_parent"
09.
android:layout_height=
"100dp"
10.
android:background=
"#0000ff"
>
11.
12.
<View
13.
android:layout_width=
"match_parent"
14.
android:layout_height=
"match_parent"
15.
android:background=
"#ff0000"
/>
16.
<View
17.
android:layout_width=
"match_parent"
18.
android:layout_height=
"match_parent"
19.
android:background=
"#00ff00"
/>
20.
21.
</com.example.layout.MyViewGroup>
22.
23.
</RelativeLayout>
效果如图所示:上图MyViewGroup是蓝色,两个子View分别为红色和绿色。
在自定义View中,onLayout配合onMeasure方法一起使用,可以实现自定义View的复杂布局。自定义View首先调用onMeasure进行测量,然后调用onLayout方法,动态获取子View和子View的测量大小,然后进行layout布局。
Android的onLayout、layout方法讲解
最新推荐文章于 2021-08-19 20:21:29 发布