2016-06-01 115 views
1

我想要一个方形FrameLayout填充它的父宽度并且其高度与其宽度匹配。我已经尝试在布局中添加一个addOnLayoutChangeListener,但我不能从里面调用requestLayout,所以我无法告诉它调整大小。Android动态更改布局大小

我能做些什么来使它的高度等于它在运行时的宽度?

回答

1

简单的办法就是延长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> 
+1

我希望不要覆盖布局,但你可能是对的,这是最简单的方法。谢谢! – Nick

+0

@Nick欢迎快乐编码:) –

+0

@Nick也投票赞成:) –

0

您获得您的视图后只是做以下

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); 
+0

我将以编程方式添加视图,因为它会改变。感谢您的回复! – Nick

+0

不错的答案,逻辑。它会派上用场 –