I am trying to create the layout as seen below.
So far I have the following, however I'm afraid that, based on the screen resolution, the circles could become skewed since I'm hardcoding the height on the main container.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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="85dp"
android:baselineAligned="false"
android:padding="10dp"
android:weightSum="5">
<RelativeLayout
android:id="@+id/layoutAvatarItem1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:layout_weight="1"
android:background="@drawable/circle_drawable_color_1">
<CircleImageView
android:id="@+id/imgAvatarItem1"
android:layout_width="80dp"
android:layout_height="match_parent"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:contentDescription="@string/general_content_desc"
app:civ_border_color="@color/AppRed"
app:civ_border_width="2dp" />
<com.wang.avi.AVLoadingIndicatorView
android:id="@+id/imgAvatarLoader1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:visibility="gone"
app:indicatorColor="@color/White"
app:indicatorName="BallPulseIndicator" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/layoutAvatarItem2"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="5dp"
android:layout_marginEnd="5dp"
android:layout_weight="1"
android:background="@drawable/circle_drawable_color_1">
<CircleImageView
android:id="@+id/imgAvatarItem2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:contentDescription="@string/general_content_desc"
app:civ_border_color="@color/AppRed"
app:civ_border_width="2dp" />
<com.wang.avi.AVLoadingIndicatorView
android:id="@+id/imgAvatarLoader2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:visibility="gone"
app:indicatorColor="@color/White"
app:indicatorName="BallPulseIndicator" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/layoutAvatarItem3"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="5dp"
android:layout_marginEnd="5dp"
android:layout_weight="1"
android:background="@drawable/circle_drawable_color_1">
<CircleImageView
android:id="@+id/imgAvatarItem3"
android:layout_width="80dp"
android:layout_height="match_parent"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:contentDescription="@string/general_content_desc"
app:civ_border_color="@color/AppRed"
app:civ_border_width="2dp" />
<com.wang.avi.AVLoadingIndicatorView
android:id="@+id/imgAvatarLoader3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:visibility="gone"
app:indicatorColor="@color/White"
app:indicatorName="BallPulseIndicator" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/layoutAvatarItem4"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="5dp"
android:layout_marginEnd="5dp"
android:layout_weight="1"
android:background="@drawable/circle_drawable_color_1">
<CircleImageView
android:id="@+id/imgAvatarItem4"
android:layout_width="80dp"
android:layout_height="match_parent"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:contentDescription="@string/general_content_desc"
app:civ_border_color="@color/AppRed"
app:civ_border_width="2dp" />
<com.wang.avi.AVLoadingIndicatorView
android:id="@+id/imgAvatarLoader4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:visibility="gone"
app:indicatorColor="@color/White"
app:indicatorName="BallPulseIndicator" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/layoutAvatarItem5"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="5dp"
android:layout_weight="1"
android:background="@drawable/circle_drawable_color_1">
<CircleImageView
android:id="@+id/imgAvatarItem5"
android:layout_width="80dp"
android:layout_height="match_parent"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:contentDescription="@string/general_content_desc"
app:civ_border_color="@color/AppRed"
app:civ_border_width="2dp" />
<com.wang.avi.AVLoadingIndicatorView
android:id="@+id/imgAvatarLoader5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:visibility="gone"
app:indicatorColor="@color/White"
app:indicatorName="BallPulseIndicator" />
</RelativeLayout>
</LinearLayout>
Circle_drawable_color_1 XML
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="@color/BackgroundColor1" />
<stroke
android:width="1dp"
android:color="@color/AppRed"/>
</shape>
How can I create the layout above as a LinearLayout, horizontal orientation with 5 of my Relative layouts within it so that as the screen size grows/shrinks, the circles will also grow/shrink?
Thank you!
To achieve responsive UI, first you need to get rid of hard coded values
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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="wrap_content" <!-- make it wrap so it can grow -->
android:baselineAligned="false"
android:padding="10dp"
android:weightSum="5">
<RelativeLayout
android:id="@+id/layoutAvatarItem1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:layout_weight="1"
android:background="@drawable/circle_drawable_color_1">
<CircleImageView
android:id="@+id/imgAvatarItem1"
android:layout_width="match_parent"
<!-- make it match, so it stretches to fit -->
android:layout_height="match_parent"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:contentDescription="@string/general_content_desc"
app:civ_border_color="@color/AppRed"
app:civ_border_width="2dp" />
<com.wang.avi.AVLoadingIndicatorView
android:id="@+id/imgAvatarLoader1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:visibility="gone"
app:indicatorColor="@color/White"
app:indicatorName="BallPulseIndicator" />
</RelativeLayout>
<!-- repeat for other four circles -->
</LinearLayout>
Now LinearLayout
will fit in width
and divide the items equally based on available screen width, so width
of your circles are calculated based on screen size, now all you need to do is to match the height
of the circle to it's width
in Java/kotlin
layoutAvatarItem1.post {
layoutAvatarItem1.layoutParams = (layoutAvatarItem1.layoutParams as LinearLayout.LayoutParams).apply {
height = width
}
}
You can do same for all the other circles