如何在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中旋转按钮的文本?的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA:如何使旋转按钮控制多个文本框?

如何将旋转按钮添加到 Android 图像裁剪屏幕?

如何在 Swift 中以编程方式旋转一组按钮?

如何在主题中全局更改android按钮文本颜色

如何在Android的RowTable中对齐文本和按钮

如何在dm脚本中创建一个旋转框?