RecyclerView takes up all screenspace

后端 未结 2 824
隐瞒了意图╮
隐瞒了意图╮ 2020-12-18 12:05

So I\'m having some trouble with a RecyclerView in a layout file

Here it is:



        
相关标签:
2条回答
  • 2020-12-18 12:46

    Change the root view to a FrameLayout. Set the gravity of the LinearLayout to bottom

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
    
    <android.support.v7.widget.RecyclerView
        android:id="@+id/chat_listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingRight="@dimen/abc_action_bar_default_padding_material"
        android:paddingLeft="@dimen/abc_action_bar_default_padding_material"
    />
    
    
    <LinearLayout
        android:layout_below="@id/chat_listview"
        android:layout_width="match_parent"
        android:layout_height="@dimen/bottom_bar_height"
        android:layout_gravity="bottom"
        android:orientation="horizontal">
    
        <EditText
            android:id="@+id/chat_input_edittext"
            android:layout_weight="7"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:inputType="textAutoCorrect"/>
    
        <Button
            android:id="@+id/chat_send_button"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:background="@drawable/ic_action_send_now"/>
    
        </LinearLayout>
    </FrameLayout>
    

    Alternatively, you can wrap the linear layout in a FrameLayout and set it to align_parentBottom = true if it is a relative layout or a linear layout at your root and you have other things in your view.

    0 讨论(0)
  • 2020-12-18 12:56

    When RecyclerView is drawn, it calculates all the remaining size on screen to itself before drawing the next elements and don't recalculate after the other elements are drawn, leaving them outside the screen.

    The trick is to draw all other elements first, and leave RecyclerView for last. FrameLayout does not work anymore so use a relative layout and put the RecyclerView last on the XML layout file.

    Example to add a bar with buttons below the RecyclerView:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="16dp"
        tools:context=".MainActivity"
        >
    
        <LinearLayout
            android:id="@+id/pagination_btns"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_alignParentBottom="true"> //HERE YOU ALIGN THIS ELEMENT TO THE BOTTOM OF THE PARENT
            <Button
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:text="@string/previous_btn_label"/>
            <Space
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"/>
            <Button
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:text="@string/next_btn_label"/>
        </LinearLayout>
    
        <android.support.v7.widget.RecyclerView
            android:id="@+id/items_recycler_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:scrollbars="vertical"
            android:layout_above="@id/pagination_btns"/> //HERE YOU ALIGN THE RECYCLERVIEW ABOVE THE PAGINATION BAR 
    
    
    </RelativeLayout>
    
    0 讨论(0)
提交回复
热议问题