【问题标题】:Custom Circular TextView - Text Not Centered in Circle自定义圆形 TextView - 文本未在圆形中居中
【发布时间】:2017-04-04 01:05:20
【问题描述】:

我利用我见过的一些不同建议组合了一个 TextView 类,并编写了这个类来在一个圆圈内显示一个 TextView。圆圈出来的效果很好,但文字显示在圆圈中心的上方。

我不知道是什么原因造成的。这是我的代码:

圆形文本视图

public class CircularTextView extends AppCompatTextView {
    private ShapeDrawable backgroundDrawable;
    private OvalShape ovalShape;

    private int backgroundColor;

    public CircularTextView(Context context) {
        super(context);
        backgroundColor = ContextCompat.getColor(context, R.color.color_circle_test_solid);
        allocateShapes();
    }

    public CircularTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        backgroundColor = ContextCompat.getColor(context, R.color.color_circle_test_solid);
        allocateShapes();
    }

    public CircularTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        backgroundColor = ContextCompat.getColor(context, R.color.color_circle_test_solid);
        allocateShapes();
    }

    //Source https://stackoverflow.com/questions/25203501/android-creating-a-circular-textview/34685568#34685568
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

        int h = this.getMeasuredHeight();
        int w = this.getMeasuredWidth();
        int r = Math.max(w, h);

        setMeasuredDimension(r, r);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        backgroundDrawable.setShape(ovalShape);
        backgroundDrawable.getPaint().setColor(backgroundColor);

        setBackground(backgroundDrawable);
    }

    private void allocateShapes(){
        backgroundDrawable = new ShapeDrawable();
        ovalShape = new OvalShape();
    }

    public void setBackgroundColor(int color){
        backgroundColor = color;
        invalidate();
    }
}

TestCircleTextViewActivity

public final class TestCircleTextViewActivity extends BaseActivity {

    @BindView(R.id.circle_text)
    CircularTextView circleText;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test_circular_textview);
        ButterKnife.bind(this);

        int circleColor = ContextCompat.getColor(this, R.color.color_circle_test_solid);
        circleText.setBackgroundColor(circleColor);
    }
}

activity_test_circular_textview.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.thinkbubble.app.ui.view.CircularTextView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:id="@+id/circle_text"
        android:layout_gravity="center"
        android:layout_centerInParent="true"
        android:padding="4dp"
        android:text="Keyword">

    </com.thinkbubble.app.ui.view.CircularTextView>

</RelativeLayout>

【问题讨论】:

  • android:gravity="center"

标签: java android textview android-view android-xml


【解决方案1】:

使用android:gravity="center" 为你TextView 使文本在圆圈中居中

【讨论】:

  • 我不敢相信我没有尝试过这个。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-10
  • 1970-01-01
相关资源
最近更新 更多