一个简单的问题我呆了一整天...
我想在片段内部垂直放置,从顶部-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重叠。这是截图
如果我在recyclerview android:layout_height =“ 0dp”中定义,那么我还有另一个问题-recyclerview消失了
android studio中的预览可以按我的需要显示所有内容,但在设备上则是另外一个
有什么建议吗?
答案 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"