2016-06-01 184 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

不錯的答案,邏輯。它會派上用場 –