How to align TextView + RecyclerView to bottom of screen in ScrollView?

I have the following XML file structure in my fragment. I have a problem with RelativeLayout 3 (id = referralsContainer). It consists of textView (id = inviteText) + RecyclerView (id = rv_referrals). I need to show a textView at the bottom of the screen at any resolution. And after that the textView should be a RecyclerView with items (when the user scrolls down). I tried to do something like this in a method when all the recyclerview items are loaded, but the recyclerview changes in different Y ax positions from time to time, I cannot figure out how to properly position this textview at the bottom of the scrren. And also ScrollView shrinks multiple recyclerView items. Can anyone help with this? All positions in the debugger look correct. The xml code is below the image. Thank.

enter image description here

this.dataSourceListForAdapter.addAll(incomeListOfItemsFromServer);
recyclerView.setY(scrollView.getBottom() - textView.getHeight());
recyclerView.setY(coordinatorView.getBottom() - textView.getHeight());
adapter.notifyDataSetChanged();


<?xml version="1.0" encoding="utf-8"?>

      

<android.support.v4.widget.SwipeRefreshLayout
    android:id="@+id/invite_friends_swipe_refresh"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

                <RelativeLayout
                    android:id="@+id/invite_friends_content_part"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:background="@color/white"
                    android:visibility="visible">

                    <RelativeLayout
                        android:id="@+id/invite_friends_container"
                        android:layout_width="match_parent"
                        android:layout_height="190dp"
                        android:layout_alignParentTop="true"
                        android:background="@color/re_black_light_new">

                        <TextView
                            android:id="@+id/invite_friends_text"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_above="@+id/invite_friends_button_container"
                            android:gravity="center"
                            android:paddingEnd="40dp"
                            android:paddingStart="40dp"
                            android:textColor="@color/white"
                            android:textSize="16sp"
                            tools:text="@string/friends_invite_message" />

                        <RelativeLayout
                            android:id="@+id/invite_friends_button_container"
                            android:layout_width="match_parent"
                            android:layout_height="60dp"
                            android:layout_alignParentBottom="true">

                            <View
                                android:layout_width="match_parent"
                                android:layout_height="40dp"
                                android:layout_alignParentTop="true"
                                android:layout_marginTop="2dp"
                                android:background="@drawable/combined_shape_white" />

                            <View
                                android:layout_width="match_parent"
                                android:layout_height="20dp"
                                android:layout_alignParentBottom="true"
                                android:background="@color/white" />

                            <android.support.v7.widget.CardView
                                android:id="@+id/invite_friends_button_invite"
                                android:layout_width="147dp"
                                android:layout_height="40dp"
                                android:layout_alignParentTop="true"
                                android:layout_centerHorizontal="true"
                                android:layout_gravity="center"
                                android:layout_marginTop="10dp"
                                card_view:cardBackgroundColor="@color/white"
                                card_view:cardCornerRadius="3dp"
                                card_view:cardElevation="2dp"
                                card_view:cardPreventCornerOverlap="false"
                                card_view:cardUseCompatPadding="true">

                                <TextView
                                    android:id="@+id/invite_friends_button_invite_text"
                                    android:layout_width="match_parent"
                                    android:layout_height="match_parent"
                                    android:background="@drawable/yellow_button_selector"
                                    android:clickable="true"
                                    android:focusable="true"
                                    android:fontFamily="sans-serif-medium"
                                    android:gravity="center"
                                    android:text="@string/friends_invite"
                                    android:textAllCaps="true"
                                    android:textColor="@color/re_black_light_new"
                                    android:textSize="14sp" />

                            </android.support.v7.widget.CardView>

                        </RelativeLayout>

                    </RelativeLayout>

                    <TextView
                        android:id="@+id/copy_choice_label"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_below="@+id/invite_friends_container"
                        android:layout_centerHorizontal="true"
                        android:textSize="12sp"
                        android:text="@string/copy_link_text"
                        android:textColor="@color/re_gray_new" />

                    <RelativeLayout
                        android:id="@+id/invite_friends_referal_link_button"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_below="@+id/copy_choice_label"
                        android:layout_marginLeft="20dp"
                        android:layout_marginRight="20dp"
                        android:layout_marginTop="16dp"
                        android:background="@drawable/rectangle_gray">

                        <TextView
                            android:id="@+id/invite_friends_referal_link_text"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_centerVertical="true"
                            android:background="?attr/selectableItemBackground"
                            android:clickable="true"
                            android:focusable="true"
                            android:fontFamily="sans-serif-light"
                            android:gravity="center"
                            android:padding="7dp"
                            android:textColor="@color/re_black_light"
                            android:textSize="12sp" />

                    </RelativeLayout>

                    <RelativeLayout
                        android:id="@+id/invite_friends_full_info_container"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_below="@+id/invite_friends_referal_link_button"
                        android:layout_marginTop="32dp">

                        <RelativeLayout
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_marginEnd="10dp"
                            android:layout_marginStart="24dp"
                            android:layout_toLeftOf="@+id/invite_friends_container_central"
                            android:gravity="center_vertical">

                            <TextView
                                android:id="@+id/invite_friends_text_friends"
                                android:layout_width="match_parent"
                                android:layout_height="wrap_content"
                                android:fontFamily="sans-serif-medium"
                                android:text="@string/friends_invite_friends"
                                android:textColor="@color/re_black_light_new"
                                android:textSize="12sp" />

                            <TextView
                                android:id="@+id/invite_friends_friends_count"
                                android:layout_width="match_parent"
                                android:layout_height="wrap_content"
                                android:layout_below="@+id/invite_friends_text_friends"
                                android:layout_marginTop="4dp"
                                android:fontFamily="sans-serif-medium"
                                android:textColor="@color/re_black_light_new"
                                android:textSize="24sp"
                                tools:text="4" />

                            <View
                                android:id="@+id/invite_friends_divider_horizontal"
                                android:layout_width="match_parent"
                                android:layout_height="1dp"
                                android:layout_below="@+id/invite_friends_friends_count"
                                android:layout_marginTop="8dp"
                                android:background="@drawable/dash_horizontal_gray"
                                android:layerType="software" />

                            <TextView
                                android:id="@+id/invite_friends_text_orders"
                                android:layout_width="match_parent"
                                android:layout_height="wrap_content"
                                android:layout_alignParentEnd="true"
                                android:layout_below="@+id/invite_friends_divider_horizontal"
                                android:layout_marginTop="14dp"
                                android:fontFamily="sans-serif-medium"
                                android:text="@string/friends_invite_orders"
                                android:textColor="@color/re_black_light_new"
                                android:textSize="12sp" />

                            <TextView
                                android:id="@+id/invite_friends_orders_count"
                                android:layout_width="match_parent"
                                android:layout_height="wrap_content"
                                android:layout_below="@+id/invite_friends_text_orders"
                                android:layout_marginTop="4dp"
                                android:fontFamily="sans-serif-medium"
                                android:textColor="@color/re_black_light_new"
                                android:textSize="24sp"
                                tools:text="32" />

                        </RelativeLayout>

                        <View
                            android:id="@+id/invite_friends_container_central"
                            android:layout_width="1dp"
                            android:layout_height="1dp"
                            android:layout_centerInParent="true"
                            android:background="@drawable/dotted_line"
                            android:layerType="software" />

                        <RelativeLayout
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_marginEnd="16dp"
                            android:layout_marginStart="10dp"
                            android:layout_toRightOf="@+id/invite_friends_container_central">

                            <TextView
                                android:id="@+id/invite_friends_income_text"
                                android:layout_width="match_parent"
                                android:layout_height="wrap_content"
                                android:layout_alignParentStart="true"
                                android:layout_alignParentTop="true"
                                android:layout_marginStart="6dp"
                                android:fontFamily="sans-serif-medium"
                                android:text="@string/friends_invite_income"
                                android:textColor="@color/re_black_light_new"
                                android:textSize="12sp" />

                            <LinearLayout
                                android:id="@+id/invite_friends_income_container"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:layout_below="@+id/invite_friends_income_text"
                                android:layout_marginTop="4dp"
                                android:orientation="horizontal">

                                <TextView
                                    android:id="@+id/invite_friends_income_count"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:layout_marginStart="6dp"
                                    android:fontFamily="sans-serif-medium"
                                    android:lines="1"
                                    android:maxLines="1"
                                    android:textColor="@color/re_black_light_new"
                                    android:textSize="24sp"
                                    tools:text="1488.77" />

                                <TextView
                                    android:id="@+id/invite_friends_income_currency"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:layout_marginStart="5dp"
                                    android:fontFamily="sans-serif-medium"
                                    android:lines="1"
                                    android:maxLines="1"
                                    android:textColor="@color/re_black_light_new"
                                    android:textSize="12sp"
                                    tools:text="." />

                            </LinearLayout>

                            <View
                                android:id="@+id/invite_friends_divider_horizontal_2"
                                android:layout_width="match_parent"
                                android:layout_height="1dp"
                                android:layout_below="@+id/invite_friends_income_container"
                                android:layout_marginEnd="16dp"
                                android:layout_marginTop="8dp"
                                android:background="@drawable/dash_horizontal_gray"
                                android:layerType="software" />

                            <TextView
                                android:id="@+id/invite_friends_text_income_pending"
                                android:layout_width="match_parent"
                                android:layout_height="wrap_content"
                                android:layout_below="@+id/invite_friends_divider_horizontal_2"
                                android:layout_marginStart="6dp"
                                android:layout_marginTop="14dp"
                                android:fontFamily="sans-serif-medium"
                                android:text="@string/friends_invite_income_pending"
                                android:textColor="@color/re_black_light"
                                android:textSize="12sp" />

                            <LinearLayout
                                android:id="@+id/invite_friends_text_income_pending_container"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:layout_below="@+id/invite_friends_text_income_pending"
                                android:layout_marginStart="6dp"
                                android:layout_marginTop="4dp"
                                android:orientation="horizontal">

                                <TextView
                                    android:id="@+id/invite_friends_text_income_pending_count"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:fontFamily="sans-serif-medium"
                                    android:textColor="@color/re_gray_new"
                                    android:textSize="24sp"
                                    tools:text="0" />

                                <TextView
                                    android:id="@+id/invite_friends_text_income_pending_count_currency"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:layout_marginStart="5dp"
                                    android:fontFamily="sans-serif-medium"
                                    android:lines="1"
                                    android:maxLines="1"
                                    android:textColor="@color/re_gray_new"
                                    android:textSize="12sp"
                                    tools:text="."/>

                            </LinearLayout>

                        </RelativeLayout>

                    </RelativeLayout>

                </RelativeLayout>

                <RelativeLayout
                    android:id="@+id/referralsContainer"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_below="@id/invite_friends_content_part"
                    android:visibility="gone"
                    android:orientation="vertical">

                    <TextView
                        android:id="@+id/inviteText"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_centerHorizontal="true"
                        android:layout_marginTop="30dp"
                        android:fontFamily="sans-serif-medium"
                        android:text="  :"
                        android:textColor="@color/re_black_light_new"
                        android:textSize="20sp"
                        android:textStyle="normal" />

                    <ImageView
                        android:id="@+id/scrollMore"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_below="@id/inviteText"
                        android:layout_centerHorizontal="true"
                        android:layout_marginBottom="6dp"
                        android:layout_marginTop="6dp"
                        android:src="@drawable/ic_scroll_more" />

                    <android.support.v7.widget.RecyclerView
                        android:id="@+id/rv_referrals"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_below="@id/scrollMore"
                        android:scrollbars="vertical" />
                </RelativeLayout>

            </RelativeLayout>

            <LinearLayout
                android:id="@+id/invite_friends_error_part"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/white"
                android:gravity="center"
                android:orientation="vertical"
                android:visibility="gone">

                <ImageView
                    android:id="@+id/error_image"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="50dp"
                    android:layout_marginRight="50dp"
                    android:layout_marginTop="20dp"
                    android:scaleType="fitCenter"
                    android:src="@drawable/lost_connection_holder" />

                <TextView
                    android:id="@+id/error_text"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/error_image"
                    android:layout_marginBottom="60dp"
                    android:layout_marginTop="10dp"
                    android:gravity="center_horizontal"
                    android:paddingLeft="20dp"
                    android:paddingRight="20dp"
                    android:text="@string/no_connection_message"
                    android:textColor="@color/black_tr_38"
                    android:textSize="19sp" />

            </LinearLayout>

        </RelativeLayout>

    </ScrollView>

</android.support.v4.widget.SwipeRefreshLayout>

      

0


source to share


1 answer


The ScrollView is not designed for sub-child layouts aligned to the bottom of the screen, as its direct child does not know where the bottom is. It's not clear from your question how you (need to) scroll to the bottom.

If it's ok to scroll by dragging the bottom (RelativeLayout 3), it's better to use the BottomSheetBehaviour in Coordinatorlayout for that layout.



If not, just put RelativeLayout 3 in the (below) SwipeRefreshLayout and handle the ScrollView scrollChanged events to animate the scroll of the bottom layout if you need to or just show / hide this bottom layout.

Keep in mind that the bottom-aligned small res will span the contents of the ScrollView and the user will not be able to scroll to the top layout.

+1


source







All Articles