Можно ли написать вертикально в текстовом виде в android?

Предположим, что у вас обычный TextView с надписью «Stackoverflow», возможно ли повернуть TextView на -90 °, чтобы S был внизу, а W в верхней части экрана? Конечно, я мог бы написать свой текст как изображение, повернуть его и использовать его таким образом, но сейчас меня интересует текст. Благодарю.

Вы можете настроить текстовое представление, как обычно

например:

 

и напишите функцию в своей деятельности, чтобы

  • отменить символы в тексте
  • вставить \n после каждого символа

а затем установите текст в TextView.

Если вы не хотите вставлять \n , вам нужно будет установить размер android:layout_width и играть с размером шрифта, чтобы не было двух символов в одной строке и без усечения

Редактировать Если я правильно понял вас, вы можете получить то, что хотите, с помощью анимации.

Например

Под res/animation/myanim.xml :

  

Вам придется играть с этим файлом, чтобы определить, где вы хотите разместить текстовое представление.

В вашей деятельности:

  TextView t = (TextView)findViewById(R.id.txtview); String txt = "Stackoverflow"; t.setText(txt); RotateAnimation ranim = (RotateAnimation)AnimationUtils.loadAnimation(this, R.anim.myanim); ranim.setFillAfter(true); //For the textview to remain at the same place after the rotation t.setAnimation(ranim); 

Работал для меня:

 public class VerticalTextView extends TextView { private int _width, _height; private final Rect _bounds = new Rect(); public VerticalTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public VerticalTextView(Context context, AttributeSet attrs) { super(context, attrs); } public VerticalTextView(Context context) { super(context); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); // vise versa _height = getMeasuredWidth(); _width = getMeasuredHeight(); setMeasuredDimension(_width, _height); } @Override protected void onDraw(Canvas canvas) { canvas.save(); canvas.translate(_width, _height); canvas.rotate(-90); TextPaint paint = getPaint(); paint.setColor(getTextColors().getDefaultColor()); String text = text(); paint.getTextBounds(text, 0, text.length(), _bounds); canvas.drawText(text, getCompoundPaddingLeft(), (_bounds.height() - _width) / 2, paint); canvas.restore(); } private String text() { return super.getText().toString(); } } 

XML:

  

Попробуй это. Он отлично работает для меня. Он может отображать одну строку текста по вертикали, но только одну строку. цвета, размер, paddings, поля и фон все отлично работают.

 public class VerticalTextView extends TextView { public VerticalTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public VerticalTextView(Context context, AttributeSet attrs) { super(context, attrs); } public VerticalTextView(Context context) { super(context); } @Override protected void onDraw(Canvas canvas) { final ColorStateList csl = getTextColors(); final int color = csl.getDefaultColor(); final int paddingBottom = getPaddingBottom(); final int paddingTop = getPaddingTop(); final int viewWidth = getWidth(); final int viewHeight = getHeight(); final TextPaint paint = getPaint(); paint.setColor(color); final float bottom = viewWidth * 9.0f / 11.0f; Path p = new Path(); p.moveTo(bottom, viewHeight - paddingBottom - paddingTop); p.lineTo(bottom, paddingTop); canvas.drawTextOnPath(getText().toString(), p, 0, 0, paint); } } 

Если вы используете API 11 или новее, вы можете попробовать:

 TextView t = (TextView) findViewById(R.id.txtview); String txt = "Stackoverflow"; t.setText(txt); t.setRotation(90); // 90 degree rotation 

Мы можем установить Rotation с представлением XML

   

Я представил решение в другом вопросе StackOverflow. Вы можете получить вертикальный TextView, onMeasure() из представления и переопределяя его onMeasure() и onDraw() . Тем не менее, он не будет поддерживать все функции TextView, а скорее его основные, такие как заполнение, размер, цвет и шрифт.

 import android.annotation.TargetApi; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.Typeface; import android.os.Build; import android.text.TextPaint; import android.util.AttributeSet; import android.util.Log; import android.util.TypedValue; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; public class VerticalLabelView extends View { private final String LOG_TAG = "VerticalLabelView"; private final int DEFAULT_TEXT_SIZE = 30; private int _ascent = 0; private int _leftPadding = 0; private int _topPadding = 0; private int _rightPadding = 0; private int _bottomPadding = 0; private int _textSize = 0; private int _measuredWidth; private int _measuredHeight; private Rect _textBounds; private TextPaint _textPaint; private String _text = ""; private TextView _tempView; private Typeface _typeface = null; private boolean _topToDown = false; public VerticalLabelView(Context context) { super(context); initLabelView(); } public VerticalLabelView(Context context, AttributeSet attrs) { super(context, attrs); initLabelView(); } public VerticalLabelView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initLabelView(); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public VerticalLabelView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); initLabelView(); } private final void initLabelView() { this._textBounds = new Rect(); this._textPaint = new TextPaint(); this._textPaint.setAntiAlias(true); this._textPaint.setTextAlign(Paint.Align.CENTER); this._textPaint.setTextSize(DEFAULT_TEXT_SIZE); this._textSize = DEFAULT_TEXT_SIZE; } public void setText(String text) { this._text = text; requestLayout(); invalidate(); } public void topToDown(boolean topToDown) { this._topToDown = topToDown; } public void setPadding(int padding) { setPadding(padding, padding, padding, padding); } public void setPadding(int left, int top, int right, int bottom) { this._leftPadding = left; this._topPadding = top; this._rightPadding = right; this._bottomPadding = bottom; requestLayout(); invalidate(); } public void setTextSize(int size) { this._textSize = size; this._textPaint.setTextSize(size); requestLayout(); invalidate(); } public void setTextColor(int color) { this._textPaint.setColor(color); invalidate(); } public void setTypeFace(Typeface typeface) { this._typeface = typeface; this._textPaint.setTypeface(typeface); requestLayout(); invalidate(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { try { this._textPaint.getTextBounds(this._text, 0, this._text.length(), this._textBounds); this._tempView = new TextView(getContext()); this._tempView.setPadding(this._leftPadding, this._topPadding, this._rightPadding, this._bottomPadding); this._tempView.setText(this._text); this._tempView.setTextSize(TypedValue.COMPLEX_UNIT_PX, this._textSize); this._tempView.setTypeface(this._typeface); this._tempView.measure(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); this._measuredWidth = this._tempView.getMeasuredHeight(); this._measuredHeight = this._tempView.getMeasuredWidth(); this._ascent = this._textBounds.height() / 2 + this._measuredWidth / 2; setMeasuredDimension(this._measuredWidth, this._measuredHeight); } catch (Exception e) { setMeasuredDimension(widthMeasureSpec, heightMeasureSpec); Log.e(LOG_TAG, Log.getStackTraceString(e)); } } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (!this._text.isEmpty()) { float textHorizontallyCenteredOriginX = this._measuredHeight / 2f; float textHorizontallyCenteredOriginY = this._ascent; canvas.translate(textHorizontallyCenteredOriginY, textHorizontallyCenteredOriginX); float rotateDegree = -90; float y = 0; if (this._topToDown) { rotateDegree = 90; y = this._measuredWidth / 2; } canvas.rotate(rotateDegree); canvas.drawText(this._text, 0, y, this._textPaint); } } } 
  • Сортировка текстового файла по длине строки, включая пробелы
  • Подпиксельный сглаженный текст в элементе canvasа HTML5
  • Как настроить кнопку UISwitch в iphone?
  • Обосновать последнюю строку div?
  • Извлечение текста OpenCV
  • Чтобы нарисовать подчеркивание под TextView в Android
  • Как я могу определить кодировку / кодовую страницу текстового файла
  • андроидный эллипсовый многострочный текст
  • Ограниченный выбор в JTextField / JTextComponent?
  • Как читать и анализировать CSV-файлы на C ++?
  • Как добавить разрыв строки в Android TextView?
  • Давайте будем гением компьютера.