'Place a View at the center of the ScrollView's area using CoordinatorLayout

Suppose I have the following layout .xml file:

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.material.appbar.AppBarLayout
        android:id="@+id/pen_apl_app_bar"
        android:layout_width="match_parent"
        android:layout_height="260dp"
        android:background="#00FF00"
        app:elevation="0dp" />

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/pen_rv_insurers"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#0000FF"
        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

    <ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center" />

</androidx.coordinatorlayout.widget.CoordinatorLayout>

It should result in a preview like this

enter image description here

My question is, how can I place the ProgressBar at the center of the RecyclerView area when using a CoordinatorLayout? The ProgressBar should always be at the center of the RecyclerView.



Solution 1:[1]

I see appbarlayout has hight 260dp so you can add RelativeLayout with top margin 260dp and move RecyclerView and ProgressBar inside it like this

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.material.appbar.AppBarLayout
        android:id="@+id/pen_apl_app_bar"
        android:layout_width="match_parent"
        android:layout_height="260dp"
        android:background="#00FF00"
        app:elevation="0dp" />

    <RelativeLayout
        android:id="@+id/relativeLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="260dp">

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/pen_rv_insurers"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#0000FF"
            app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
            app:layout_behavior="@string/appbar_scrolling_view_behavior">

        </androidx.recyclerview.widget.RecyclerView>

        <ProgressBar
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_centerHorizontal="true"
            android:layout_gravity="center" />
    </RelativeLayout>

</androidx.coordinatorlayout.widget.CoordinatorLayout>

enter image description here

Edit** This Shuold work if hight dynamic of appbar

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.material.appbar.AppBarLayout
        android:id="@+id/pen_apl_app_bar"
        android:layout_width="match_parent"
        android:layout_height="260dp"
        android:background="#00FF00"
        app:elevation="0dp" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/pen_apl_app_bar">

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/pen_rv_insurers"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#0000FF"
            app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
            app:layout_behavior="@string/appbar_scrolling_view_behavior">

        </androidx.recyclerview.widget.RecyclerView>

        <ProgressBar
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_gravity="center" />
    </RelativeLayout>

</RelativeLayout>

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1