LinearLayout в квадратной форме - PullRequest
7 голосов
/ 27 апреля 2011

возможно ли иметь LinearLayout внутри LinearLayout с равной высотой и шириной динамически? я не хочу указывать значения, просто высота равна размеру возможной ширины.

ТНХ

Ответы [ 3 ]

16 голосов
/ 27 апреля 2011

У меня та же проблема, и я не мог найти способ решить эту проблему, используя только 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>

Если есть простое решение, я буду рад узнать его.

2 голосов
/ 21 октября 2013

Немного расширив ответ Моджо для обработки высоты или ширины, являющейся ограниченным измерением согласно контексту:

@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));
}
0 голосов
/ 10 сентября 2017

Извлечение SquareLayout , Android Library , которая предоставляет класс-оболочку для различных макетов, предоставляя им квадратные размеры без потери каких-либо основных функций.

Размеры рассчитываются непосредственно перед тем, как макет отображается , следовательно, нет повторного рендеринга или чего-либо подобного для настройки после получения вида.

Чтобы использовать библиотеку, добавьте это в свой 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"
/>
...