为 MaterialCardView 设置 "outside" 底部边缘未按预期工作
Setting "outside" bottom edge for MaterialCardView doesn't work as expected
我正在尝试构建一个带有阴影的 tooltip
,如下图所示:
我能够通过将图像用作 background
来做到这一点。但我无法对其应用阴影。因此,在搜索后我发现 this article,它使用 MaterialCardView
并将 MaterialShapeDrawable
作为 background
.
应用于它
我试过以下代码:
val shapeDrawable = MaterialShapeDrawable()
val shapeAppearanceModel =
ShapeAppearanceModel.builder().setBottomEdge(TriangleEdgeTreatment(20f, false)).build()
shapeDrawable.shapeAppearanceModel = shapeAppearanceModel
materialDialog.background = shapeDrawable
XML 文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="@dimen/width_custom_marker"
android:layout_height="100dp"
android:padding="16dp"
tools:ignore="Overdraw">
<com.google.android.material.card.MaterialCardView
android:id="@+id/materialCard"
android:layout_width="@dimen/width_custom_marker"
android:layout_height="50dp" />
</RelativeLayout>
我的问题 是,在为这个对象 TriangleEdgeTreatment(30f, true)
设置 inside
标志和 false
时,它没有按预期工作。但是,使用 true
设置标志可以正常工作。
TriangleEdgeTreatment(30f, false)
TriangleEdgeTreatment(30f, true)
提前致谢!
我可以使用:
<LinearLayout
android:clipChildren="false"
android:clipToPadding="false"
android:padding="16dp"
..>
<com.google.android.material.card.MaterialCardView
../>
并应用 TriangleEdgeTreatment
:
float size = getResources().getDimension(R.dimen.triangle_size); //16dp
TriangleEdgeTreatment triangleEdgeTreatment = new TriangleEdgeTreatment(size,false);
MaterialCardView cardView = findViewById(R.id.card);
cardView.setShapeAppearanceModel(cardView.getShapeAppearanceModel()
.toBuilder()
.setBottomEdge(triangleEdgeTreatment)
.build());
我正在尝试构建一个带有阴影的 tooltip
,如下图所示:
我能够通过将图像用作 background
来做到这一点。但我无法对其应用阴影。因此,在搜索后我发现 this article,它使用 MaterialCardView
并将 MaterialShapeDrawable
作为 background
.
我试过以下代码:
val shapeDrawable = MaterialShapeDrawable()
val shapeAppearanceModel =
ShapeAppearanceModel.builder().setBottomEdge(TriangleEdgeTreatment(20f, false)).build()
shapeDrawable.shapeAppearanceModel = shapeAppearanceModel
materialDialog.background = shapeDrawable
XML 文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="@dimen/width_custom_marker"
android:layout_height="100dp"
android:padding="16dp"
tools:ignore="Overdraw">
<com.google.android.material.card.MaterialCardView
android:id="@+id/materialCard"
android:layout_width="@dimen/width_custom_marker"
android:layout_height="50dp" />
</RelativeLayout>
我的问题 是,在为这个对象 TriangleEdgeTreatment(30f, true)
设置 inside
标志和 false
时,它没有按预期工作。但是,使用 true
设置标志可以正常工作。
TriangleEdgeTreatment(30f, false)
TriangleEdgeTreatment(30f, true)
提前致谢!
我可以使用:
<LinearLayout
android:clipChildren="false"
android:clipToPadding="false"
android:padding="16dp"
..>
<com.google.android.material.card.MaterialCardView
../>
并应用 TriangleEdgeTreatment
:
float size = getResources().getDimension(R.dimen.triangle_size); //16dp
TriangleEdgeTreatment triangleEdgeTreatment = new TriangleEdgeTreatment(size,false);
MaterialCardView cardView = findViewById(R.id.card);
cardView.setShapeAppearanceModel(cardView.getShapeAppearanceModel()
.toBuilder()
.setBottomEdge(triangleEdgeTreatment)
.build());