Layout_width = match_parent и layout_height = то же, что и ширина

По сути, я хочу, чтобы это был квадрат, заполняющий экран по горизонтали. Но что указать для высоты? В качестве примера я использовал FrameLayout, но это может быть любое представление.

<FrameLayout
    android:layout_width = "match_parent"
    android:layout_height = "?">
1
0
323
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Если вы используете ConstraintLayout, вы можете указать DimensionRatio представления с помощью app: layout_constraintDimensionRatio = "1"

Как это:

<?xml version = "1.0" encoding = "utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:app = "http://schemas.android.com/apk/res-auto"
xmlns:tools = "http://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
tools:context = ".MainActivity">

<TextView
    android:layout_width = "0dp"
    android:layout_height = "0dp"
    android:text = "Hello World!"
    app:layout_constraintDimensionRatio = "1"
    app:layout_constraintBottom_toBottomOf = "parent"
    app:layout_constraintLeft_toLeftOf = "parent"
    app:layout_constraintRight_toRightOf = "parent"
    app:layout_constraintTop_toTopOf = "parent" />

(В ConstraintLayout вы не используете match_parent, но вы можете использовать 0dp, что эквивалентно match_constraint, и если вы установите горизонтальные ограничения для parent, он соответствует ширине родителей)

Так что сделать это только с помощью макета невозможно.

Для этого вы должны создать View и расширить FrameLayout, а затем переопределить onMeasure.

public class SquareFramelayout extends Framelayout {  

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 
    {
            super.onMeasure(widthMeasureSpec, widthMeasureSpec);
    }
}

Другие вопросы по теме