RecyclerView与TextView和Button重叠或在片段内消失

时间:2018-11-02 11:26:53

标签: android android-fragments android-recyclerview overlapping

一个简单的问题我呆了一整天...
我想在片段内部垂直放置,从顶部-TextView(title),在其下方-RecyclerView,以及在recyclerview-按钮下方 这是我的片段xml

<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout   xmlns:android="http://schemas.android.com/apk/res/android"  
xmlns:app="http://schemas.android.com/apk/res-auto"  
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".presentation.view.CurrentLocationFragment">

<TextView
    android:id="@+id/country_output"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/recycler_view_title"
    android:textAlignment="center"
    android:textSize="30sp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<android.support.v7.widget.RecyclerView
    android:id="@+id/recycler_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="12dp"
    app:layout_constraintBottom_toTopOf="@id/btn_country_choice"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@id/country_output"
    />

<Button
    android:id="@+id/btn_country_choice"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/yes"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent" />

在这种情况下,recyclerview与textview重叠,而按钮部分与recyclerview重叠。这是截图 ovelapping

如果我在recyclerview android:layout_height =“ 0dp”中定义,那么我还有另一个问题-recyclerview消失了

disappering

android studio中的预览可以按我的需要显示所有内容,但在设备上则是另外一个 android studio preview

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

您的RecyclerView存在约束问题。它的高度不受限制,它包装了内容。您应该使用0dp,这意味着MATCH_CONSTRAINT

  

使用0dp,相当于“ MATCH_CONSTRAINT”

     

重要提示:不建议将MATCH_PARENT用于包含在   ConstraintLayout。可以通过使用定义类似的行为   MATCH_CONSTRAINT与相应的左/右或上/下   约束设置为“父”。

https://developer.android.com/reference/android/support/constraint/ConstraintLayout

此外,使用@id代替@+id。这是因为Button ID仅在布局中的RecyclerView之前声明。从文档中:

  

字符串开头的符号(@)表示   XML解析器应解析并扩展ID字符串的其余部分,   将其标识为ID资源。加号(+)表示这是   必须创建一个新的资源名称并将其添加到我们的资源中   (在R.java文件中)。还有许多其他ID资源   由Android框架提供。引用Android时   资源ID,您不需要加号,但必须添加android   包名称空间。

因此,应用所有内容:

<android.support.v7.widget.RecyclerView
    android:id="@+id/recycler_view"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_marginBottom="12dp"
    app:layout_constraintBottom_toTopOf="@+id/btn_country_choice"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@id/country_output"/>

答案 1 :(得分:1)

对于已添加的相关布局代码,将RecyclerView的高度和宽度都使用MATCH_CONSTRAINT。如下

android:layout_width="0dp"
android:layout_height="0dp"