我想要一个方形FrameLayout
填充它的父宽度并且其高度与其宽度匹配。我已经尝试在布局中添加一个addOnLayoutChangeListener,但我不能从里面调用requestLayout
,所以我无法告诉它调整大小。Android动态更改布局大小
我能做些什么来使它的高度等于它在运行时的宽度?
我想要一个方形FrameLayout
填充它的父宽度并且其高度与其宽度匹配。我已经尝试在布局中添加一个addOnLayoutChangeListener,但我不能从里面调用requestLayout
,所以我无法告诉它调整大小。Android动态更改布局大小
我能做些什么来使它的高度等于它在运行时的宽度?
简单的办法就是延长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);
我将以编程方式添加视图,因为它会改变。感谢您的回复! – Nick
不错的答案,逻辑。它会派上用场 –
我希望不要覆盖布局,但你可能是对的,这是最简单的方法。谢谢! – Nick
@Nick欢迎快乐编码:) –
@Nick也投票赞成:) –