TextView与圆形背景

时间:2018-01-20 17:45:06

标签: java android

我制作了一个信使应用程序,我为每条消息制作了一个具有这种形状的背景:

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<corners
    android:bottomLeftRadius="80dp"
    android:bottomRightRadius="80dp"
    android:topRightRadius="80dp"
    android:topLeftRadius="80dp"
   />
<solid android:color="#fff"/>

但问题是当消息很长时,角落很大,这使得我的消息布局很糟糕!我想知道是否有另一种方法来制作圆形背景!

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您可以使用9-patch drawables。

这些是png文件,它们允许您定义无法拉伸的区域以及与视图大小无关的区域。

你可以在这里阅读: https://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch

您可以在此处阅读有关如何创建它的信息: https://developer.android.com/studio/write/draw9patch.html

9-patch drawables通常用于Adnroid SDK标准视图。

答案 2 :(得分:0)

您可以创建一个扩展Button类的自定义按钮类,然后覆盖onLayout()方法可能是这样的......基本上你设置的是corner radius = height/2

    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        super.onLayout(changed, left, top, right, bottom);
        if(this.getBackground()!=null && this.getBackground() instanceof LayerDrawable) {
            LayerDrawable layerDrawable = (LayerDrawable)(this.getBackground().mutate());
            GradientDrawable gd1 = (GradientDrawable)layerDrawable.findDrawableByLayerId(R.id.layer_one);
            roundEdgeGradientDrawable(gd1, this.getHeight());
        }
    }

    public static GradientDrawable roundEdgeGradientDrawable(GradientDrawable bgShape, float height) {
        if (bgShape != null) {
            float radius = height / 2;
            float[] radii = {radius, radius, radius, radius, radius, radius, radius, radius};
            bgShape.setCornerRadii(radii);
        }
        return bgShape;
    }