Android的圆圈背景变成了椭圆形

我想在textview上放一个圆圈背景。 渲染时,圆形变成椭圆形。

我的布局XML:

<TextView android:id="@+id/amount_key" android:layout_weight="1" android:layout_height="match_parent" android:layout_width="match_parent" android:layout_marginRight="2dp" android:gravity="center" android:background="@drawable/circle" android:layout_marginLeft="20dp" android:text="3\ndays" android:padding="20dp" android:textColor="#ffffff" android:textStyle="bold" android:textSize="25dp" /> </LinearLayout> 

我的圈子背景:

 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <solid android:color="#79bfea"/> </shape> 

Solutions Collecting From Web of "Android的圆圈背景变成了椭圆形"

  • textViewlayout_heightlayout_height更改为wrap_content
  • 在形状标签内添加大小标签,如下所示
 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">> <solid android:color="#79bfea" /> <size android:height="25dp" android:width="25dp"/> </shape> 

如果它仍然是椭圆形,请尝试增加尺寸标签的宽度和高度。 它为我工作!

您可以创build自己的Drawable,将半径限制在其宽度和高度之间的最小值。

 package com.example.android; import android.graphics.Canvas; import android.graphics.ColorFilter; import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.Rect; import android.graphics.drawable.Drawable; public class ColorCircleDrawable extends Drawable { private final Paint mPaint; private int mRadius = 0; public ColorCircleDrawable(final int color) { this.mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); this.mPaint.setColor(color); } @Override public void draw(final Canvas canvas) { final Rect bounds = getBounds(); canvas.drawCircle(bounds.centerX(), bounds.centerY(), mRadius, mPaint); } @Override protected void onBoundsChange(final Rect bounds) { super.onBoundsChange(bounds); mRadius = Math.min(bounds.width(), bounds.height()) / 2; } @Override public void setAlpha(final int alpha) { mPaint.setAlpha(alpha); } @Override public void setColorFilter(final ColorFilter cf) { mPaint.setColorFilter(cf); } @Override public int getOpacity() { return PixelFormat.TRANSLUCENT; } } 

然后应用到你的textView:

 textView.setBackground(new ColorCircleDrawable(Color.RED)); 

我扩展了TextView类来设置宽度为高度

 public class TextViewSquareShaped extends TextView { public TextViewSquareShaped(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(attrs); } public TextViewSquareShaped(Context context, AttributeSet attrs) { super(context, attrs); init(attrs); } public TextViewSquareShaped(Context context) { super(context); init(null); } protected void onDraw(Canvas canvas) { super.onDraw(canvas); } private void init(AttributeSet attrs) { } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec); setMeasuredDimension(width, width); Log.v("measure", "width:" + width + " height:" + width); } } 

再结合上面Sudhasri的回答,我可以显示确切的圆形文字视图。

所以不需要给予固定的身高和体重。

尝试环而不是椭圆形

 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="ring" > <solid android:color="#79bfea" /> </shape> 

为了得到这个

在这里输入图像说明

我在对方内部使用了两个LinearLayout,并将父引力设置为CENTER

 <LinearLayout android:layout_width="80dp" android:layout_height="50dp" android:baselineAligned="false" android:gravity="center" android:orientation="vertical"> <LinearLayout android:layout_width="45dp" android:layout_height="45dp" android:gravity="center" android:background="@drawable/oval" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="Text" android:textSize="12sp" /> </LinearLayout> </LinearLayout> 

这是可绘制文件夹内的oval.xml

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <solid android:color="#393939" /> <size android:width="40dp" android:height="40dp" /> </shape> 

没有内部的LinearLayout,你会得到这个

在这里输入图像说明

它的代码是

 <LinearLayout android:layout_width="80dp" android:layout_height="50dp" android:baselineAligned="false" android:gravity="center" android:background="@drawable/oval" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="Text" android:textSize="12sp" /> </LinearLayout> 

既然你正在使用match_parent的宽度和高度,并在后台设置drawable,所以它会是椭圆形的。 要实现圆,你可以给宽度和高度相同的尺寸。 NA不想全屏,那么你可以从使用WindowManager java代码的宽度,并设置宽度和高度相同的值。