为什么使用约束布局,listView 将按钮推出屏幕?如何解决?
Why using constraint layout, a listView pushes button out of screen? how to solve it?
我在约束布局中有一个 editText、一个按钮和一个 listView。
问题是当我填写时,listView 将按钮和 editText 推到屏幕外。
有人可以帮我解决吗?非常感谢
这里是 XML 代码:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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=".MainActivity">
<ListView
android:id="@+id/lvJugadores"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
</ListView>
<EditText
android:id="@+id/etJugador"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="@string/etJugadorHint"
android:inputType="textPersonName"
android:textAlignment="center"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/lvJugadores" />
<Button
android:id="@+id/btnConfirmarNuevoJugador"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/btnConfirmarNuevoJugador"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/etJugador" />
</androidx.constraintlayout.widget.ConstraintLayout>
问题如下。让我们看看您的代码。
<ListView
android:id="@+id/lvJugadores"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
</ListView>
您看到的高度是0dp
,没有bottom
限制。有一个顶部和开始,结束,但由于没有底部并且高度是 0dp
所以它覆盖在其他上面。
现在进入解决方案,可以有多种解决方案。我建议您从底部链接 EditText
和 Button
,然后让 ListView
获取剩余的 space。
所以你的结构会有点像这样
- 按钮限制在父级的底部。
- 编辑文本限制在按钮的顶部和底部。
- ListView 以其高度
0dp
限制按钮从上到下以及父级从上到上的高度 0dp
从而占用任何可用的 space。
一些其他的解决方案可以是给 ListView
一个固定的排序高度。为此你可以使用 height_percent
属性并给它一些东西,比如让我们说 70% 的屏幕,所以它将是 0.7
.
试试这个。
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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=".MainActivity">
<ListView
android:id="@+id/lvJugadores"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/etJugador">
</ListView>
<EditText
android:id="@+id/etJugador"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="etJugadorHint"
android:inputType="textPersonName"
android:textAlignment="center"
app:layout_constraintBottom_toTopOf="@id/btnConfirmarNuevoJugador"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/lvJugadores" />
<Button
android:id="@+id/btnConfirmarNuevoJugador"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="btnConfirmarNuevoJugador"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/etJugador"
//this attribute make button and textview always within screen
app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
我在约束布局中有一个 editText、一个按钮和一个 listView。
问题是当我填写时,listView 将按钮和 editText 推到屏幕外。
有人可以帮我解决吗?非常感谢
这里是 XML 代码:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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=".MainActivity">
<ListView
android:id="@+id/lvJugadores"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
</ListView>
<EditText
android:id="@+id/etJugador"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="@string/etJugadorHint"
android:inputType="textPersonName"
android:textAlignment="center"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/lvJugadores" />
<Button
android:id="@+id/btnConfirmarNuevoJugador"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/btnConfirmarNuevoJugador"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/etJugador" />
</androidx.constraintlayout.widget.ConstraintLayout>
问题如下。让我们看看您的代码。
<ListView
android:id="@+id/lvJugadores"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
</ListView>
您看到的高度是0dp
,没有bottom
限制。有一个顶部和开始,结束,但由于没有底部并且高度是 0dp
所以它覆盖在其他上面。
现在进入解决方案,可以有多种解决方案。我建议您从底部链接 EditText
和 Button
,然后让 ListView
获取剩余的 space。
所以你的结构会有点像这样
- 按钮限制在父级的底部。
- 编辑文本限制在按钮的顶部和底部。
- ListView 以其高度
0dp
限制按钮从上到下以及父级从上到上的高度0dp
从而占用任何可用的 space。
一些其他的解决方案可以是给 ListView
一个固定的排序高度。为此你可以使用 height_percent
属性并给它一些东西,比如让我们说 70% 的屏幕,所以它将是 0.7
.
试试这个。
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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=".MainActivity">
<ListView
android:id="@+id/lvJugadores"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/etJugador">
</ListView>
<EditText
android:id="@+id/etJugador"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="etJugadorHint"
android:inputType="textPersonName"
android:textAlignment="center"
app:layout_constraintBottom_toTopOf="@id/btnConfirmarNuevoJugador"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/lvJugadores" />
<Button
android:id="@+id/btnConfirmarNuevoJugador"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="btnConfirmarNuevoJugador"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/etJugador"
//this attribute make button and textview always within screen
app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>