Reputation: 151
I have built a BMI Calculator app. My text views, edit text, and buttons align differently in different screen sizes. How to align it so that it fits all screens?
I've already tried the previous answers in StackOverflow but so of the properties are removed in a new version of the android studio and also read google documentation but couldn't understand...Sorry!
My XML layout file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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"
android:background="#5864"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="162dp"
android:layout_marginLeft="162dp"
android:layout_marginTop="60dp"
android:layout_marginEnd="161dp"
android:layout_marginRight="161dp"
android:text="@string/bmi_calculator"
android:textSize="30sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.436"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/userHeight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="63dp"
android:ems="10"
app:layout_constraintTop_toBottomOf="@+id/textView"
tools:layout_editor_absoluteX="107dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:importantForAutofill="no"
android:hint="@string/enter_height"
android:gravity="center"
android:inputType="numberDecimal"/>
<EditText
android:id="@+id/userWeight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="66dp"
android:ems="10"
android:inputType="numberDecimal"
app:layout_constraintTop_toBottomOf="@+id/userHeight"
tools:layout_editor_absoluteX="106dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:importantForAutofill="no"
android:hint="@string/enter_weight"
android:gravity="center"/>
<TextView
android:id="@+id/userBMI"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:hint="@string/your_bmi_will_be_displayed_here"
app:layout_constraintTop_toBottomOf="@+id/userWeight"
tools:layout_editor_absoluteX="107dp"
android:textSize="18sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:gravity="center_horizontal"/>
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="80dp"
android:onClick="buttonClicked"
android:text="@string/calculate_bmi"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/userBMI"
android:layout_alignParentBottom="true"
android:textSize="20sp"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
I'm learning android on my own, a little help, please. I've added the images showing how my app looks in two different screen size.
Upvotes: 1
Views: 1033
Reputation: 1512
you have to create "chain" --> constraint all bottoms of your component to the top of the element at it bottom using app:layout_constraintBottom_toTopOf
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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"
android:background="#5864">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/bmi_calculator"
android:textSize="30sp"
app:layout_constraintBottom_toTopOf="@+id/userHeight"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/userHeight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:gravity="center"
android:hint="@string/enter_height"
android:importantForAutofill="no"
android:inputType="numberDecimal"
app:layout_constraintBottom_toTopOf="@+id/userWeight"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView" />
<EditText
android:id="@+id/userWeight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:gravity="center"
android:hint="@string/enter_weight"
android:importantForAutofill="no"
android:inputType="numberDecimal"
app:layout_constraintBottom_toTopOf="@+id/userBMI"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/userHeight" />
<TextView
android:id="@+id/userBMI"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:hint="@string/your_bmi_will_be_displayed_here"
android:textSize="18sp"
app:layout_constraintBottom_toTopOf="@+id/button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/userWeight" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:onClick="buttonClicked"
android:text="@string/calculate_bmi"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/userBMI" />
</androidx.constraintlayout.widget.ConstraintLayout>
Upvotes: 1