如何将 CoordinatorLayout 的直接子组件限制为 ConstraintLayout 内的组件?
How do I constrain components that are a direct children of CoordinatorLayout to components inside a ConstraintLayout?
我正在尝试在水平分隔线上对齐晶圆厂。同时,我需要 fab 和 CircularRevealLinearLayout 成为 CoordinatorLayout 的直接子级。如果他们不是直接子代,则 fab 不会激活。我试图将 CoordinatorLayout 放在 ConstraintLayout 中并将其约束到水平分隔线,但它不起作用。
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.card.MaterialCardView
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:id="@+id/players_container"
android:layout_width="500dp"
android:layout_height="600dp">
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/coordinator"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.circularreveal.CircularRevealLinearLayout
android:id="@+id/circular_reveal"
android:layout_width="300dp"
android:layout_height="500dp"
android:elevation="10dp"
android:visibility="invisible"
app:layout_constraintTop_toTopOf="@id/edit_btn"
app:layout_constraintEnd_toEndOf="@id/edit_btn"
android:background="@color/color_secondary"
app:layout_behavior="com.google.android.material.transformation.FabTransformationSheetBehavior"/>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/edit_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_edit_black_24dp"
app:layout_constraintHorizontal_bias=".95"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/horizontal_divider"
app:layout_constraintBottom_toBottomOf="@id/horizontal_divider"
app:layout_constraintEnd_toEndOf="parent"/>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/image_layout"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/horizontal_divider"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/teamBackground"
android:layout_width="match_parent"
android:layout_height="400dp"
android:src="@drawable/team_golfball"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/team_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="@id/image_layout"
app:layout_constraintEnd_toEndOf="@id/image_layout"
app:layout_constraintTop_toTopOf="@id/image_layout"
app:layout_constraintBottom_toBottomOf="@id/image_layout"
android:text="Team One"
style="@style/TextAppearance.MyTheme.Headline7"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<View
android:id="@+id/horizontal_divider"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/black_regular"
app:layout_constraintTop_toBottomOf="@id/image_layout"
app:layout_constraintBottom_toTopOf="@id/player_card_recyclerView"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/player_card_recyclerView"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintHeight_percent=".75"
android:overScrollMode="never"
android:padding="20dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/horizontal_divider"
tools:itemCount="5"
tools:listitem="@layout/playercard_draggable" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</com.google.android.material.card.MaterialCardView>
我想要的:
请加-
app:layout_anchor="@id/teamBackground"
app:layout_anchorGravity="bottom|end"
在FloatingActionButton
。
layout_anchor
是该视图应相对定位的锚视图。
layout_anchorGravity
是相对于锚点的位置,在 X 和 Y 轴上,在其父边界内。在这里我使用 bottom
和 end
因为你想分享你的图像。
完整代码为 -
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/edit_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_edit_black_24dp"
app:layout_constraintHorizontal_bias=".95"
app:layout_anchor="@id/teamBackground"
app:layout_anchorGravity="bottom|end"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/horizontal_divider"
app:layout_constraintBottom_toBottomOf="@id/horizontal_divider"
app:layout_constraintEnd_toEndOf="parent"/>
请查看 ImageView
的 layout_height
。它应该是 0dp
而不是 400dp
.
我正在尝试在水平分隔线上对齐晶圆厂。同时,我需要 fab 和 CircularRevealLinearLayout 成为 CoordinatorLayout 的直接子级。如果他们不是直接子代,则 fab 不会激活。我试图将 CoordinatorLayout 放在 ConstraintLayout 中并将其约束到水平分隔线,但它不起作用。
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.card.MaterialCardView
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:id="@+id/players_container"
android:layout_width="500dp"
android:layout_height="600dp">
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/coordinator"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.circularreveal.CircularRevealLinearLayout
android:id="@+id/circular_reveal"
android:layout_width="300dp"
android:layout_height="500dp"
android:elevation="10dp"
android:visibility="invisible"
app:layout_constraintTop_toTopOf="@id/edit_btn"
app:layout_constraintEnd_toEndOf="@id/edit_btn"
android:background="@color/color_secondary"
app:layout_behavior="com.google.android.material.transformation.FabTransformationSheetBehavior"/>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/edit_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_edit_black_24dp"
app:layout_constraintHorizontal_bias=".95"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/horizontal_divider"
app:layout_constraintBottom_toBottomOf="@id/horizontal_divider"
app:layout_constraintEnd_toEndOf="parent"/>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/image_layout"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/horizontal_divider"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/teamBackground"
android:layout_width="match_parent"
android:layout_height="400dp"
android:src="@drawable/team_golfball"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/team_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="@id/image_layout"
app:layout_constraintEnd_toEndOf="@id/image_layout"
app:layout_constraintTop_toTopOf="@id/image_layout"
app:layout_constraintBottom_toBottomOf="@id/image_layout"
android:text="Team One"
style="@style/TextAppearance.MyTheme.Headline7"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<View
android:id="@+id/horizontal_divider"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/black_regular"
app:layout_constraintTop_toBottomOf="@id/image_layout"
app:layout_constraintBottom_toTopOf="@id/player_card_recyclerView"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/player_card_recyclerView"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintHeight_percent=".75"
android:overScrollMode="never"
android:padding="20dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/horizontal_divider"
tools:itemCount="5"
tools:listitem="@layout/playercard_draggable" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</com.google.android.material.card.MaterialCardView>
我想要的:
请加-
app:layout_anchor="@id/teamBackground"
app:layout_anchorGravity="bottom|end"
在FloatingActionButton
。
layout_anchor
是该视图应相对定位的锚视图。
layout_anchorGravity
是相对于锚点的位置,在 X 和 Y 轴上,在其父边界内。在这里我使用 bottom
和 end
因为你想分享你的图像。
完整代码为 -
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/edit_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_edit_black_24dp"
app:layout_constraintHorizontal_bias=".95"
app:layout_anchor="@id/teamBackground"
app:layout_anchorGravity="bottom|end"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/horizontal_divider"
app:layout_constraintBottom_toBottomOf="@id/horizontal_divider"
app:layout_constraintEnd_toEndOf="parent"/>
请查看 ImageView
的 layout_height
。它应该是 0dp
而不是 400dp
.