Search code examples
androidandroid-activity

Making an activity resizable


I have this activity with a Constraint Layout:

Activity

And here is the XML :

<?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="@color/colorPrimary"
    android:orientation="vertical"
    tools:context=".Activity">

    <TextView
        android:id="@+id/textView4"
        android:layout_width="290dp"
        android:layout_height="35dp"
        android:gravity="center_horizontal|center_vertical"
        android:textSize="20sp"
        android:textStyle="bold"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView3" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="290dp"
        android:layout_height="33dp"
        android:gravity="center_horizontal|center_vertical"
        android:textSize="20sp"
        android:textStyle="bold"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView2" />

    <SeekBar
        android:id="@+id/slider"
        style="@style/Widget.AppCompat.SeekBar"
        android:layout_width="383dp"
        android:layout_height="79dp"
        android:layout_marginTop="8dp"
        android:hapticFeedbackEnabled="true"
        android:indeterminate="false"
        android:max="1200"
        android:progress="0"
        android:scrollbarSize="30dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView"
        app:tickMark="@color/colorAccent" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="197dp"
        android:layout_height="80dp"
        android:gravity="center_horizontal|center_vertical"
        android:textSize="50sp"
        android:typeface="normal"
        app:fontFamily="sans-serif"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView4" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="290dp"
        android:layout_height="33dp"
        android:layout_marginTop="24dp"
        android:gravity="center_horizontal|center_vertical"
        android:textSize="20sp"
        android:textStyle="bold"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/Text"
        android:layout_width="231dp"
        android:layout_height="67dp"
        android:layout_marginTop="4dp"
        android:gravity="center_horizontal|center_vertical"
        android:textSize="25sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/slider" />

    <TextView
        android:id="@+id/total"
        android:layout_width="270dp"
        android:layout_height="94dp"
        android:layout_marginTop="8dp"
        android:gravity="center_horizontal|center_vertical"
        android:textSize="60sp"
        android:textStyle="bold"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/comisionText" />

    <Button
        android:id="@+id/btn"
        android:layout_width="142dp"
        android:layout_height="45dp"
        android:layout_marginBottom="16dp"
        android:background="@drawable/btn_effect"
        android:clickable="false"
        android:enabled="false"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/submitBtn"
        app:layout_constraintVertical_bias="0.678" />

    <Button
        android:id="@+id/submitBtn"
        android:layout_width="181dp"
        android:layout_height="71dp"
        android:layout_marginTop="20dp"
        android:layout_marginEnd="4dp"
        android:background="@drawable/btn_effect"
        android:clickable="false"
        android:enabled="false"
        android:textSize="24sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.508"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/but" />

    <EditText
        android:id="@+id/but"
        android:layout_width="217dp"
        android:layout_height="45dp"
        android:layout_marginTop="16dp"
        android:clickable="false"
        android:ems="10"
        android:enabled="false"
        android:gravity="center_horizontal"
        android:inputType="number"
        android:textSize="18sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/total" />

</androidx.constraintlayout.widget.ConstraintLayout>

The problem is that when i try it on a smaller screen phone, it cuts off some of the objects from the bottom of the activity. How can i make it resizable so it can fit any screen size? Every object is constrained Top-To-Bottom of the object above it.


Solution

  • You can use ScrollView, so the user can scroll down and see the whole activity. Just wrapping your ConstraintLayout in ScrollView should be enough, like this:

    <?xml version="1.0" encoding="utf-8"?>
    <ScrollView 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="@color/colorPrimary"
        android:orientation="vertical"
        tools:context=".Activity">
    
        <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/colorPrimary"
            android:orientation="vertical"
            tools:context=".Activity">
    
            <TextView
                android:id="@+id/textView4"
                android:layout_width="290dp"
                android:layout_height="35dp"
                android:gravity="center_horizontal|center_vertical"
                android:textSize="20sp"
                android:textStyle="bold"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/textView3" />
    
            <TextView
                android:id="@+id/textView3"
                android:layout_width="290dp"
                android:layout_height="33dp"
                android:gravity="center_horizontal|center_vertical"
                android:textSize="20sp"
                android:textStyle="bold"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/textView2" />
    
            <SeekBar
                android:id="@+id/slider"
                style="@style/Widget.AppCompat.SeekBar"
                android:layout_width="383dp"
                android:layout_height="79dp"
                android:layout_marginTop="8dp"
                android:hapticFeedbackEnabled="true"
                android:indeterminate="false"
                android:max="1200"
                android:progress="0"
                android:scrollbarSize="30dp"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/textView"
                app:tickMark="@color/colorAccent" />
    
            <TextView
                android:id="@+id/textView"
                android:layout_width="197dp"
                android:layout_height="80dp"
                android:gravity="center_horizontal|center_vertical"
                android:textSize="50sp"
                android:typeface="normal"
                app:fontFamily="sans-serif"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/textView4" />
    
            <TextView
                android:id="@+id/textView2"
                android:layout_width="290dp"
                android:layout_height="33dp"
                android:layout_marginTop="24dp"
                android:gravity="center_horizontal|center_vertical"
                android:textSize="20sp"
                android:textStyle="bold"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />
    
            <TextView
                android:id="@+id/Text"
                android:layout_width="231dp"
                android:layout_height="67dp"
                android:layout_marginTop="4dp"
                android:gravity="center_horizontal|center_vertical"
                android:textSize="25sp"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/slider" />
    
            <TextView
                android:id="@+id/total"
                android:layout_width="270dp"
                android:layout_height="94dp"
                android:layout_marginTop="8dp"
                android:gravity="center_horizontal|center_vertical"
                android:textSize="60sp"
                android:textStyle="bold"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/Text" />
    
            <Button
                android:id="@+id/btn"
                android:layout_width="142dp"
                android:layout_height="45dp"
                android:layout_marginBottom="16dp"
                android:background="@drawable/btn_effect"
                android:clickable="false"
                android:enabled="false"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.498"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/submitBtn"
                app:layout_constraintVertical_bias="0.678" />
    
            <Button
                android:id="@+id/submitBtn"
                android:layout_width="181dp"
                android:layout_height="71dp"
                android:layout_marginTop="20dp"
                android:layout_marginEnd="4dp"
                android:background="@drawable/btn_effect"
                android:clickable="false"
                android:enabled="false"
                android:textSize="24sp"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.508"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/but" />
    
            <EditText
                android:id="@+id/but"
                android:layout_width="217dp"
                android:layout_height="45dp"
                android:layout_marginTop="16dp"
                android:clickable="false"
                android:ems="10"
                android:enabled="false"
                android:gravity="center_horizontal"
                android:inputType="number"
                android:textSize="18sp"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/total"
                android:importantForAutofill="no" />
    
        </androidx.constraintlayout.widget.ConstraintLayout>
    </ScrollView>
    
    

    Anyways, you should use wrap_content and match_parent instead of hard-coded sizes. Your layout needs to be flexible and adapt to different screen sizes, and that's not possible if you're using determined sizes in your layout. Please take a look into Android Developer: Support different screen sizes