【问题标题】:Can not round corners of drawable with method setCornerRadius无法使用 setCornerRadius 方法圆圆可绘制的角
【发布时间】:2018-11-22 18:14:00
【问题描述】:

我有简单的TextView。我想用圆角设置简单的彩色背景。

我尝试了两种方法。

public static Drawable createRoundDrawable(int color, float radius) {
        GradientDrawable drawable = new GradientDrawable();
        drawable.setShape(GradientDrawable.RECTANGLE);
        drawable.setColor(color);
        drawable.setCornerRadius(radius);
        return drawable;
    }

public static Drawable createRoundDrawable(int color, float radius) {
        PaintDrawable drawable = new PaintDrawable(color);
        drawable.setCornerRadius(radius);
        return drawable;
    }

我使用createRoundDrawable 方法创建drawable 并将背景设置为textView by

textView.setBackground(background);

因此,背景应用于 textView,但角没有任何半径。为什么?以及如何解决?

【问题讨论】:

  • 我在示例项目中尝试了您的代码。这个对我有用。您能否向我们分享其他信息,例如您的 xml 文件、使用的 api 等。

标签: android


【解决方案1】:

最好使用像这样的圆角可绘制 XML 文件

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:padding="10dp"
    android:shape="rectangle">
    <!-- you can use any color you want-->
    <solid android:color="@color/colorPrimary" />
    <corners android:radius="20dp" />
</shape>

然后将文件设置为drawable

【讨论】:

    【解决方案2】:

    删除

     drawable.setShape(GradientDrawable.RECTANGLE);
    

    应该是

       public static Drawable createRoundDrawable(int color, float radius) {
        GradientDrawable drawable = new GradientDrawable();
        drawable.setColor(color);
        drawable.setCornerRadius(radius);
        return drawable;
       }
    

    【讨论】:

      【解决方案3】:

      你可以试试这个: 在 drawable 文件夹中创建一个新的 Drawable 资源文件,将其命名为 custom_background.xml,内容如下:

      <?xml version="1.0" encoding="utf-8"?>
      <shape
          xmlns:android="http://schemas.android.com/apk/res/android"
          android:shape="rectangle">
          <corners android:radius="15dp" />
          <solid
              android:color="#FFFFFF" />
      </shape>
      

      给出您选择的半径和颜色,并在 textview 的布局文件中添加背景标签 android:background="@drawable/custom_background"

      【讨论】:

        【解决方案4】:

        尝试使用 setCornerRadii() 将角设置为单个角

        public static Drawable createRoundDrawable(int color, float radius) {
                GradientDrawable drawable = new GradientDrawable();
                drawable.setShape(GradientDrawable.RECTANGLE);
                drawable.setColor(color);
                drawable.setCornerRadii(new float[] { radius, radius, radius, radius, radius, radius, radius, radius});
                return drawable;
            }
        

        【讨论】: