Child of RelativeLayout is not filling the height of the RelativeLayout

后端 未结 8 1718
终归单人心
终归单人心 2021-01-02 01:04

I have a ListView which gets populated with RelativeLayouts. The content of these RelativeLayouts can change and thus change their height respectively. On each RelativeLayou

相关标签:
8条回答
  • 2021-01-02 01:14

    I had a similar problem with a RelativeLayout inside a ScrollView. According to the documentation there is a bug in RelativeLayout (up to version 17) that cause mistakes in measured height if it is added inside scrolling container (like ListView).

    So to solve the problem you should calculate height programmatically.

    You could make your extended class and override the onMeasure method or add a OnGlobalLayoutListener to the parent view.

    I choose the second way. Here is my solution:

    Example

    findViewById(R.id.scroll_view).getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            float topElementPosition = findViewById(R.id.top_element).getY();
            float bottomElementPosition = findViewById(R.id.bottom_element).getY();
            int bottomElementHeight = findViewById(R.id.bottom_element).getMeasuredHeight();
            int height = (int)(bottomElementPosition-topElementPosition+bottomElementHeight);
            findViewById(R.id.view).setMinimumHeight(height);
            findViewById(R.id.scroll_view).getViewTreeObserver().removeGlobalOnLayoutListener(this);
        }
    });
    
    0 讨论(0)
  • 2021-01-02 01:17

    My problem was the the following line

    android:fitsSystemWindows="true" <-- In the parent view
    

    was removed. Having added it back, it works fine now.

    0 讨论(0)
  • 2021-01-02 01:19

    I had a similar issue inside the cells of my RecyclerView which had a RelativeLayout as root element.

    A workaround for me was wrapping an extra LinearLayout around the root RelativeLayout element.

    So you card looks like this:

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    
            <RelativeLayout 
                        android:layout_width="match_parent"
                        android:layout_height="match_parent">
                <View
                    android:id="@+id/view_with_same_height_as_parent"
                    android:layout_width="10dp"
                    android:layout_height="fill_parent"
                    android:layout_alignParentBottom="true"
                    android:layout_alignParentTop="true"/>
    ...
    
    
        </RelativeLayout>
    </LinearLayout>
    

    Source: https://stackoverflow.com/a/28799251/3708094

    0 讨论(0)
  • 2021-01-02 01:23

    Had the same pesky problem which by the way makes no sense. What worked for me in the end was changing the android:layout_height in RelativeLayout tag to fill_parent like this

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" 
      ...
    

    hope this helps

    0 讨论(0)
  • 2021-01-02 01:28

    You'll want to add layout_alignParentTop="true" and layout_alignParentBottom="true" to status - this will ensure that the view touches both the top and bottom of post's RelativeLayout.

    0 讨论(0)
  • 2021-01-02 01:28

    I fixed by manually set layout during onLayout for invalid view:

    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        super.onLayout(changed, left, top, right, bottom);
    
        int rootMarginRight = ((MarginLayoutParams)root.getLayoutParams()).rightMargin;
        int paddingRight = root.getPaddingRight() + rootMarginRight;
    
        //invalid view
        actionsContainer.layout(
                right - actions.getWidth() - paddingRight,
                0,
                right - paddingRight,
                getHeight()
        );
    }
    
    0 讨论(0)
提交回复
热议问题