Android 动态更改布局大小

Android dynamically change layout size

我想要一个正方形 FrameLayout 来填充其父项的宽度并且其高度与其宽度相匹配。我试过向布局添加 addOnLayoutChangeListener,但我无法从内部对其调用 requestLayout,因此我无法告诉它调整大小。

我怎样才能使它的高度在运行时等于它的宽度?

简单的解决方案是扩展 FrameLayout

public class SquareFrameLayout extends FrameLayout {

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, widthMeasureSpec);
            // or you can use this if you want the square to use width as it basis
             super.onMeasure(widthMeasureSpec, widthMeasureSpec); 
    }
}

像下面这样使用你的布局

 <your.package.SquareFrameLayout
   android:layout_width="match_parent"
    ......>
        <!-- other child views -->
 </your.package.SquareFrameLayout>

获得视图后,只需执行以下操作

    ViewGroup.LayoutParams lp = view.getLayoutParams();
    Display display = ((AppCompatActivity) context).getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    int screenWidth = size.X;
    lp.height = screenWidth;
    view.setLayoutParams(lp);