[英]Layout with relative width to current height
是否可以將LinearLayout的layout_height =“ match_parent”和layout_width歸因於高度的一半?
然后,我將這些布局放在更大的HorizontalScrollView中,並讓布局保持所需的寬高比。
是否可以在不創建自己的布局的情況下進行處理?
為此,您需要一個自定義ViewGroup。 Google有一個名為ProportionalLayout的應用程序 -它不是Android SDK的一部分,因此您必須將源代碼復制到您的應用程序中才能在XML布局中使用它。
您還需要將其添加到res/values/attrs.xml
:
<declare-styleable name="ProportionalLayout">
<attr name="direction" format="string"/>
<attr name="ratio" format="float"/>
</declare-styleable>
您可以通過獲取布局高度,然后將寬度設置為該大小的一半,以編程方式執行此操作。
LinearLayout layout = (LinearLayout)findViewById(R.id.numberPadLayout);
int height = layout.getHeight();
LayoutParams params = layout.getLayoutParams();
params.height = height;
params.width = height/2;
我一個月前就面對這個問題。 找到解決該問題的唯一方法:在布局文件中,使width = match_parent和height = 0dp或其他!
在活動的onCreate方法中添加onGlobalLayoutListener()。 當測量所有小部件的所有高度和寬度時,將調用此方法。 因此,您可以通過mLinearLayout.getWidth();獲得寬度。
void onCreate(..) {
...
mLinearLayout = getViewById(R.id.your_layout);
mFrameLayout.getViewTreeObserver().addOnGlobalLayoutListener(myOnGlobalLayoutListener);
}
OnGlobalLayoutListener myOnGlobalLayoutListener =new OnGlobalLayoutListener(){
@Override
public void onGlobalLayout() {
if (!mFlag) {
mFlag = true;
mLinearLayout.setLayoutParams(mLinearLayout.getWidth(), mLinearLayout.getWidth() / 2));
}
}
};
對不起我的英語不好! 希望對您有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.