方形的LinearLayout

时间:2011-04-27 11:03:50

标签: android android-linearlayout

是否可以在LinearLayout内部具有相同高度和宽度的LinearLayout动态?我不想指定值,只是高度与可能宽度的大小相同。

THX

3 个答案:

答案 0 :(得分:16)

我有同样的问题,我找不到使用xml解决这个问题的方法。所以我编写了自定义布局并从xml中引用它。

public class SquareLayout extends LinearLayout {

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, widthMeasureSpec);
            // or you can use this if you want the square to use height as it basis
            // super.onMeasure(heightMeasureSpec, heightMeasureSpec); 
    }
}

并在xml中像这样引用它

<your.package.SqureLayout .....
</your.package.SquareLayout>

如果有最简单的解决方案,我会很高兴知道它。

答案 1 :(得分:2)

扩展Mojo的答案,根据上下文处理高度或宽度作为约束维度:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int width = MeasureSpec.getSize(widthMeasureSpec);
    int height = MeasureSpec.getSize(heightMeasureSpec);
    int size = Math.min(width, height);
    // Call super with adjusted spec
    super.onMeasure(MeasureSpec.makeMeasureSpec(size, MeasureSpec.EXACTLY),
            MeasureSpec.makeMeasureSpec(size, MeasureSpec.EXACTLY));
}

答案 2 :(得分:0)

查看SquareLayout,一个 Android库,它为不同的布局提供了一个包装类,使它们在不丢失任何核心功能的情况下进行尺寸标注。

尺寸是在渲染布局之前计算的,因此在获得视图后无需重新渲染或进行任何调整。

要使用库,请将其添加到build.gradle:

repositories {
    maven {
        url "https://maven.google.com"
    }
}

dependencies {
    compile 'com.github.kaushikthedeveloper:squarelayout:0.0.3'
}

您的XML将如下所示:

<!-- Inner Linear Layout -->   
<com.kaushikthedeveloper.squarelayout.SquareLinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
/>