【发布时间】:2012-05-10 11:27:52
【问题描述】:
我目前已经实现了一个自定义 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);
}
【问题讨论】:
-
您是否为每个孩子使用
ImageView?如果是这样,您可以尝试ImageView.ScaleType。 -
抱歉应该说
ImageButton。