相对宽度与当前高度的布局

时间:2014-11-09 18:06:04

标签: android android-layout

是否可以将LinearLayout与layout_height =" match_parent"和layout_width属于高度的一半?

然后我会将这些布局放在较大的Horizo​​ntalScrollView中,让布局保持所需的宽高比。

如果没有创建我自己的处理它的布局,这可能吗?

3 个答案:

答案 0 :(得分:3)

您需要一个自定义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>

答案 1 :(得分:0)

您可以通过获取布局高度以编程方式执行此操作,然后将宽度设置为该大小的一半。

LinearLayout layout = (LinearLayout)findViewById(R.id.numberPadLayout);
int height = layout.getHeight();
LayoutParams params = layout.getLayoutParams();
params.height = height;
params.width = height/2;

答案 2 :(得分:0)

我在一个月前遇到过这个问题。找到了解决它的唯一方法: 在布局文件中,make width = match_parent,height = 0dp或者其他什么!

在onCreate方法中添加你的活动add 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));
        }
    }
};

抱歉我的英文! 希望它会对你有所帮助!