对话框中的RecyclerView占用(几乎)整个区域

时间:2017-09-19 07:02:27

标签: android android-layout android-recyclerview

我有一个带布局的对话框

subject_view.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingLeft="8dp"
    android:paddingRight="8dp"
    android:paddingTop="8dp"
    android:paddingBottom="8dp">

    <TextView
        android:layout_marginLeft="15dp"
        android:layout_marginTop="15dp"
        android:text="Subject"
        android:textSize="18sp"
        android:textColor="@color/black"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/subject_name"/>

    <LinearLayout
        android:weightSum="2"
        android:gravity="end"
        android:layout_below="@id/subject_name"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <ViewSwitcher
            android:layout_weight="1"
            android:layout_marginTop="8dp"
            android:layout_below="@id/subject_name"
            android:id="@+id/switcher"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <LinearLayout
                android:layout_gravity="center"
                android:gravity="center"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
                <ProgressBar
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"/>
                <TextView
                    android:paddingLeft="8dp"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/please_wait"/>
            </LinearLayout>

            <android.support.v7.widget.RecyclerView
                android:layout_marginTop="10dp"
                android:id="@+id/studentRecycler"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
            </android.support.v7.widget.RecyclerView>
        </ViewSwitcher>

        <Button
            android:layout_weight="1"
            android:layout_below="@id/switcher"
            android:layout_alignParentRight="true"
            android:id="@+id/ok_Btn"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:background="@drawable/blue_button"
            android:text="ok"
            android:textColor="#fff"/>
    </LinearLayout>

</RelativeLayout>

创建对话框后,我从服务器获取数据以填充RecyclerView。那时,ViewPager的第一个孩子(带有进度条)是可见的。当我从服务器获取数据时,我将RecyclerView设置为可见子项。

问题在于,当RecyclerView有很多行时,ViewSwitcher下包含RecyclerView的按钮只能部分显示(比如,按钮的三分之一是不可见的)。

屏幕截图(不应该看起来如何)

enter image description here

但是当recyclerView没有按预期显示那么多行时,

屏幕截图(应该如何看待)

enter image description here

我该如何解决这个问题?

5 个答案:

答案 0 :(得分:3)

每当你为线性布局点添加重量时要记住:

将android:weightSum =“1”作为一个,子布局权重从0.0到1.0 例如:机器人:layout_weight = “0.3”

使用布局权重为0dp而不是pf硬编码值ex:android:layout_height =“0dp”而不是android:layout_height =“30dp”

请尝试使用此布局。希望它能正常工作

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="8dp"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:paddingTop="8dp">

<TextView
    android:id="@+id/subject_name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="15dp"
    android:layout_marginTop="15dp"
    android:text="Subject"
    android:textColor="@color/black"
    android:textSize="18sp" />

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/subject_name"
    android:gravity="end"
    android:orientation="vertical"
    android:weightSum="1">

    <ViewSwitcher
        android:id="@+id/switcher"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_below="@id/subject_name"
        android:layout_marginTop="8dp"
        android:layout_weight="0.9">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:gravity="center"
            android:orientation="horizontal">

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

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingLeft="8dp"
                android:text="@string/please_wait" />
        </LinearLayout>

        <android.support.v7.widget.RecyclerView
            android:id="@+id/studentRecycler"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"></android.support.v7.widget.RecyclerView>
    </ViewSwitcher>

    <Button
        android:id="@+id/ok_Btn"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_alignParentRight="true"
        android:layout_below="@id/switcher"
        android:layout_weight="0.1"
        android:background="@drawable/blue_button"
        android:text="ok"
        android:textColor="#fff" />
</LinearLayout>

答案 1 :(得分:1)

您应该在布局中正确维护 weightSum 权重。有关更多知识,您可以查看this solution并像这样申请

  <LinearLayout
        android:weightSum="2"
        android:gravity="end"
        android:layout_below="@id/subject_name"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <ViewSwitcher
            android:layout_weight="1.5"
            android:layout_marginTop="8dp"
            android:layout_below="@id/subject_name"
            android:id="@+id/switcher"
            android:layout_width="match_parent"
            android:layout_height="0dp">

            <LinearLayout
                android:layout_gravity="center"
                android:gravity="center"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
                <ProgressBar
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"/>
                <TextView
                    android:paddingLeft="8dp"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/please_wait"/>
            </LinearLayout>

            <android.support.v7.widget.RecyclerView
                android:layout_marginTop="10dp"
                android:id="@+id/studentRecycler"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
            </android.support.v7.widget.RecyclerView>
        </ViewSwitcher>

        <Button
            android:layout_weight="0.5"
            android:layout_below="@id/switcher"
            android:layout_alignParentRight="true"
            android:id="@+id/ok_Btn"
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            android:background="@drawable/blue_button"
            android:text="ok"
            android:textColor="#fff"/>
    </LinearLayout>

答案 2 :(得分:0)

在回收视图中使用 android:layout_marginBottom =“30dp”

  <android.support.v7.widget.RecyclerView
            android:layout_marginTop="10dp"
            android:layout_marginBottom="30dp"
            android:id="@+id/studentRecycler"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
        </android.support.v7.widget.RecyclerView>

答案 3 :(得分:0)

试试这个:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:paddingTop="8dp"
android:paddingBottom="8dp">

<TextView
    android:layout_marginLeft="15dp"
    android:layout_marginTop="15dp"
    android:text="Subject"
    android:textSize="18sp"
    android:textColor="@color/black"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/subject_name"/>

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

    <ViewSwitcher
        android:layout_marginTop="8dp"
        android:id="@+id/switcher"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <LinearLayout
            android:layout_gravity="center"
            android:gravity="center"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <ProgressBar
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
            <TextView
                android:paddingLeft="8dp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/please_wait"/>
        </LinearLayout>

        <android.support.v7.widget.RecyclerView
            android:layout_marginTop="10dp"
            android:id="@+id/studentRecycler"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
        </android.support.v7.widget.RecyclerView>
    </ViewSwitcher>

    <Button
        android:layout_below="@id/switcher"
        android:layout_alignParentRight="true"
        android:id="@+id/ok_Btn"
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:background="@drawable/blue_button"
        android:text="ok"
        android:textColor="#fff"/>
</RelativeLayout>

答案 4 :(得分:0)

好的,立即检查!

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:paddingTop="8dp"
android:paddingBottom="8dp">

<TextView
    android:layout_marginLeft="15dp"
    android:layout_marginTop="15dp"
    android:text="Subject"
    android:textSize="18sp"
    android:textColor="@color/black"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/subject_name"/>

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

    <ViewSwitcher
        android:layout_marginTop="8dp"
        android:id="@+id/switcher"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <LinearLayout
            android:layout_gravity="center"
            android:gravity="center"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <ProgressBar
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
            <TextView
                android:paddingLeft="8dp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Please wait"/>
        </LinearLayout>

        <android.support.v7.widget.RecyclerView
            android:layout_marginTop="10dp"
            android:id="@+id/studentRecycler"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
        </android.support.v7.widget.RecyclerView>
    </ViewSwitcher>

    <Button
        android:layout_weight="1"
        android:layout_alignParentRight="true"
        android:id="@+id/ok_Btn"
        android:layout_below="@id/switcher"
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:background="#369"
        android:text="OK"
        android:textColor="#fff"/>

</RelativeLayout>

</RelativeLayout>