簡體   English   中英

具有相對於當前高度的相對寬度的布局

[英]Layout with relative width to current height

是否可以將LinearLayout的layout_height =“ match_parent”和layout_width歸因於高度的一半?

然后,我將這些布局放在更大的Horizo​​ntalScrollView中,並讓布局保持所需的寬高比。

是否可以在不創建自己的布局的情況下進行處理?

為此,您需要一個自定義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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM