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);
我想要一个正方形 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);