按钮drawablestart在背景边框/角的外部绘制

vnjpjtjt  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(343)

我想做一个有点圆形的按钮和一个可绘制的开始(没有填充)。
我将此添加到按钮背景中:

<?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的方形边框。

mo49yndu

mo49yndu1#

视图(或您的案例中的按钮)始终为矩形。应用圆角背景时,它只是背景图像圆角,而不是视图本身。如果需要在drawablestart中设置圆角,则需要在drawablestart中设置圆角。

yvfmudvl

yvfmudvl2#

我找到了一个简单易行的解决办法,想法是用一个 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 (它是属性、依赖项等…),转到此链接。

相关问题