我目前已经实现了一个自定义 ViewGroup 类,它试图在屏幕上均匀地和对角地定位项目(带有可绘制对象的按钮)。
不幸的是,如果项目太大,它们往往会重叠以确保所有内容都适合屏幕。
我希望有一种更简单的方法可以使用已经存在的布局(API8+)来实现这一点,或者如果有一些简单的东西,我可以在我的 ViewGroup 类中进行更改以使子视图更小以避免重叠。(比如让每个子视图都需要精确的大小,均匀布局不重叠)
这是我的 onMeasure 课程(没有做任何特别的事情。让孩子们自己测量)
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
measureChildren(widthMeasureSpec, heightMeasureSpec);
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = MeasureSpec.getSize(heightMeasureSpec);
setMeasuredDimension(width, height);
}
编辑:如果我更改 onMeasure 以手动将孩子测量到一定的宽度/高度,他们会被剪裁。看起来子视图(或其可绘制对象)实际上并未自行缩放以适应测量值。
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = MeasureSpec.getSize(heightMeasureSpec);
int newChildWidth = width / getChildCount();
int newChildHeight = height / getChildCount();
final int size = getChildCount();
for (int i = 0; i < size; ++i) {
View child = getChildAt(i);
child.measure(MeasureSpec.EXACTLY | newChildWidth, MeasureSpec.EXACTLY | newChildHeight);
}
setMeasuredDimension(width, height);
}