按钮 drawableStart 在背景之外绘制 border/corners
Button drawableStart draws outside of background border/corners
我想制作一个带有 drawableStart(无填充)的圆形按钮。
我将这个添加到按钮背景中:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#CC232323"/>
<corners android:radius="50sp"/>
</shape>
按钮是:
<Button
android:id="@+id/btn_play"
android:layout_width="match_parent"
android:layout_height="50sp"
android:layout_marginStart="25sp"
android:layout_marginEnd="25sp"
android:layout_weight="1"
android:background="@drawable/btn_bg"
android:drawableStart="@drawable/icon_layer_list"
android:text="@string/sample_text"
android:textAlignment="textStart"
android:textAllCaps="false"
android:textColor="@color/colorWhite" />
图层列表是:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/background_design"
android:height="50sp"
android:width="50sp"
/>
</layer-list>
角确实在按钮上起作用,但 drawableStart 不受它们的影响,所以我得到一个按钮,一侧是圆形边框,另一侧是 drawableStart 的方形边框。
视图(或您的情况下的按钮)始终为矩形。当您应用带圆角的背景时,它只是背景图像变圆,而不是视图本身。如果你需要在drawableStart中有圆角,你需要在你为drawableStart设置的drawable中有圆角。
我找到了一个简单易行的解决方案,它的想法是用 CardView
包裹按钮并将其 cardCornersRadius
设置为所需的半径。
像这样:
<androidx.cardview.widget.CardView
android:layout_width="150dp"
android:layout_height="150dp"
app:cardCornerRadius="250dp"
android:layout_gravity="center">
<Button
android:id="@+id/btn_play"
android:layout_width="match_parent"
android:layout_height="50sp"
android:layout_marginStart="25sp"
android:layout_marginEnd="25sp"
android:layout_weight="1"
android:background="@drawable/btn_bg"
android:drawableStart="@drawable/icon_layer_list"
android:text="@string/sample_text"
android:textAlignment="textStart"
android:textAllCaps="false"
android:textColor="@color/colorWhite"/>
</androidx.cardview.widget.CardView>
毫无疑问,这是我找到的最简单的方法,可以让视图在边框内运行,CardView
不会让按钮或其中的任何东西绘制到边框之外/角落.
有关 CardView
的更多信息(它的属性、依赖性等...),请转到 This link。
我想制作一个带有 drawableStart(无填充)的圆形按钮。
我将这个添加到按钮背景中:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#CC232323"/>
<corners android:radius="50sp"/>
</shape>
按钮是:
<Button
android:id="@+id/btn_play"
android:layout_width="match_parent"
android:layout_height="50sp"
android:layout_marginStart="25sp"
android:layout_marginEnd="25sp"
android:layout_weight="1"
android:background="@drawable/btn_bg"
android:drawableStart="@drawable/icon_layer_list"
android:text="@string/sample_text"
android:textAlignment="textStart"
android:textAllCaps="false"
android:textColor="@color/colorWhite" />
图层列表是:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/background_design"
android:height="50sp"
android:width="50sp"
/>
</layer-list>
角确实在按钮上起作用,但 drawableStart 不受它们的影响,所以我得到一个按钮,一侧是圆形边框,另一侧是 drawableStart 的方形边框。
视图(或您的情况下的按钮)始终为矩形。当您应用带圆角的背景时,它只是背景图像变圆,而不是视图本身。如果你需要在drawableStart中有圆角,你需要在你为drawableStart设置的drawable中有圆角。
我找到了一个简单易行的解决方案,它的想法是用 CardView
包裹按钮并将其 cardCornersRadius
设置为所需的半径。
像这样:
<androidx.cardview.widget.CardView
android:layout_width="150dp"
android:layout_height="150dp"
app:cardCornerRadius="250dp"
android:layout_gravity="center">
<Button
android:id="@+id/btn_play"
android:layout_width="match_parent"
android:layout_height="50sp"
android:layout_marginStart="25sp"
android:layout_marginEnd="25sp"
android:layout_weight="1"
android:background="@drawable/btn_bg"
android:drawableStart="@drawable/icon_layer_list"
android:text="@string/sample_text"
android:textAlignment="textStart"
android:textAllCaps="false"
android:textColor="@color/colorWhite"/>
</androidx.cardview.widget.CardView>
毫无疑问,这是我找到的最简单的方法,可以让视图在边框内运行,CardView
不会让按钮或其中的任何东西绘制到边框之外/角落.
有关 CardView
的更多信息(它的属性、依赖性等...),请转到 This link。