如何在android中旋转按钮的文本?
Posted
技术标签:
【中文标题】如何在android中旋转按钮的文本?【英文标题】:How to rotate text of the Button in android? 【发布时间】:2020-03-19 07:31:11 【问题描述】:我想旋转按钮上的文字,但一整天都做不到。
我尝试了自定义垂直按钮,但它没有使按钮中的文本居中。我尝试了 java 和 xml 代码中的所有重力选项。
这是我的 VerticalButton 代码:
public class VerticalButton extends Button
public VerticalButton(Context context, AttributeSet attrs)
super(context, attrs);
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
super.onMeasure(heightMeasureSpec, widthMeasureSpec);
setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth());
@Override
protected void onDraw(Canvas canvas)
TextPaint textPaint = getPaint();
textPaint.setColor(getCurrentTextColor());
textPaint.drawableState = getDrawableState();
canvas.save();
canvas.translate(0, getHeight());
canvas.rotate(-90);
canvas.translate(getCompoundPaddingLeft(), getExtendedPaddingTop());
getLayout().draw(canvas);
canvas.restore();
我尝试使用android:rotation="-90"
旋转按钮
这并没有按照我想要的方式工作。因为它没有编辑背景大小。
我尝试使用 Button 和 TextView 进行相对布局,但无法将 TextView 置于 Button 之上
提前致谢。
【问题讨论】:
请发布您的 xml 文件 【参考方案1】:我找到了解决方案。
我编辑了 onDraw 函数。首先用getTextBounds()
获取文本的宽度和高度
在getTextBounds()
中,将按钮的文本作为参数。
然后编辑canvas.translate()
函数,如下所示。它使按钮中的文本居中。
@Override
protected void onDraw(Canvas canvas)
TextPaint textPaint = getPaint();
textPaint.setColor(getCurrentTextColor());
textPaint.drawableState = getDrawableState();
Rect bounds = new Rect();
textPaint.getTextBounds("ENTER",0,"ENTER".length(), bounds);
Log.e("TAG", "onDraw: "+ bounds.width() + " "+bounds.height());
canvas.save();
canvas.translate(getWidth()/2 - bounds.height(), (float) (getHeight()/2 + bounds.width()/1.5));
canvas.rotate(-90);
getLayout().draw(canvas);
canvas.restore();
【讨论】:
【参考方案2】:尝试以下两种方法之一:
Is it possible to write vertically in a textview in android?
Sideways View with XML Android
据称,您可以在 xml 中设置旋转属性,就像在上一个中一样,它可能会起作用。我没有尝试过,希望你能成功。由于您尝试使用 -90,请尝试将度数设置为 270
【讨论】:
我试过了,但没有用。谢谢你的答案。我发布了解决方案【参考方案3】:您只需将按钮文本设置为"E\nN\nT\nE\nR"
【讨论】:
字符不会旋转。以上是关于如何在android中旋转按钮的文本?的主要内容,如果未能解决你的问题,请参考以下文章