所以我需要一个视图总是正方形,我写了以下自定义类
public class SquareView extends LinearLayoutCompat
{
public SquareView(Context context)
{
super(context);
}
public SquareView(Context context, AttributeSet attrs)
{
super(context, attrs);
}
public SquareView(Context context, AttributeSet attrs, int defStyleAttr)
{
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int width = getMeasuredWidth();
int height = getMeasuredHeight();
if (width > height)
{
setMeasuredDimension(width, width);
}
else
{
setMeasuredDimension(height, height);
}
}
}
但是,使用match_parent
和wrap_content
的视图中的孩子不再表现正常
我该如何解决这个问题?
答案 0 :(得分:2)
这是解决您的大问题的答案,而不是修复自定义视图的方法。
ConstraintLayout
支持调整儿童的大小以获得一定的宽高比。如果你想要一个方形的LinearLayout,你可以把它放在一个ConstraintLayout中并强制实现1:1的宽高比。
https://developer.android.com/training/constraint-layout/index.html#adjust-the-view-size
将大小设置为比率
如果至少有一个视图尺寸设置为“匹配约束”(0dp),则可以将视图大小设置为16:9之比。要启用比率,请单击“切换纵横比约束”(图10中的标注1),然后在显示的输入中输入宽度:高度比。
如果宽度和高度都设置为匹配约束,则可以单击“切换纵横比约束”以选择基于另一个维度的比率。视图检查器通过用实线连接相应的边来指示哪个被设置为比率。
例如,如果将两侧都设置为“匹配约束”,请单击“切换纵横比约束”两次以将宽度设置为高度的比率。现在整个尺寸取决于视图的高度(可以任何方式定义),如图11所示。