自定义SquareView - 不符合match_parent ||的孩子包装内容

时间:2017-07-29 02:12:16

标签: android android-layout android-view

所以我需要一个视图总是正方形,我写了以下自定义类

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_parentwrap_content的视图中的孩子不再表现正常

我该如何解决这个问题?

1 个答案:

答案 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所示。