Подтвердить что ты не робот

Как поворачивать TextView 90 градусов и отображать

У меня возникла ситуация на странице Graph, где LinearLayout должен отображать TextView с поворотом на 90 градусов.

Надеюсь, мой вопрос будет ясен, если не сообщите мне.

4b9b3361

Ответ 1

Самый быстрый и удобный способ - Rotate на Animation

используйте анимацию поворота на вашем обычном TextView.

rotateAnimation.xml:

<rotate  xmlns:android="http://schemas.android.com/apk/res/android"
           android:fromDegrees="0" 
           android:toDegrees="-90"
           android:pivotX="50%"
           android:duration="0"
           android:fillAfter="true" />

Код Java:

  TextView text = (TextView)findViewById(R.id.txtview);       
  text.setText("rotated text here");

  RotateAnimation rotate= (RotateAnimation)AnimationUtils.loadAnimation(this,R.anim.rotateAnimation);
  text.setAnimation(rotate);

Ответ 2

Попробуйте следующее:

<TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:rotation="-95"
                android:text="2" 
                />

Ответ 3

В android для любого нового вида существует метод setRotation (float), который вы можете использовать

textview.setRotation(float);

но учтите, что этот метод добавлен в уровень API 11

поэтому, если вы хотите его поддержать, вы можете использовать этот

if (Build.VERSION.SDK_INT < 11) {

    RotateAnimation animation = new RotateAnimation(oldAngel, newAngel);
    animation.setDuration(100);
    animation.setFillAfter(true);
    watermarkText.startAnimation(animation);
} else {

    watermarkText.setRotation(progress);
}

Ответ 4

 <TextView 
            android:id="@+id/rotated_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:alpha=".3"
            android:background="@drawable/grey_capsule"
            android:gravity="center"
            android:textColor="@android:color/white"
            android:textSize="14sp"
            android:padding="4dp"
            android:layout_marginLeft="-50dp"
            android:rotation="-90"
            android:text="Andrew Coder" />

Ответ 5

[SOLVED] Спустя год из этого в моем списке ведер без подходящих ответов на форумах я, наконец, отсортировал это!

Трюк здесь состоит в том, чтобы жестко закодировать layout_width и layout_height TextView больше, чем текст будет когда-либо - например. 100dp x 100dp.

Затем поместите TextView в FrameLayout и отключите отсечение для FrameLayout android:clipChildren="false" и клип, чтобы отменить для TextView android:clipToPadding="false":

TextView с жестко заданной высотой и шириной

TextView теперь будет плавать в FrameLayout. Используйте настройки гравитации TextView, чтобы переместить текст внутри границы.

Затем используйте параметры layout_gravity для перемещения границы внутри родительского FrameLayout внутри него:

Вот пример правого и нижнего выравниваемого текста, повернутого на -90 градусов:

Пример решения

[ОБНОВЛЕНИЕ] Пример XML для просмотра кадра с повернутым текстом:

       <FrameLayout
            android:layout_width="@dimen/item_col_width_val"
            android:layout_height="match_parent"
            android:layout_weight="0.25"
            android:padding="@dimen/table_header_margin">
            <TextView
                android:layout_width="@dimen/table_title_row_height"
                android:layout_height="@dimen/table_title_row_height"
                android:layout_gravity="bottom|end"
                android:gravity="bottom"
                android:rotation="-90"
                android:text="@string/asm_col_title_in_stock"
                android:textColor="@color/colorGood" />
        </FrameLayout>

Ответ 6

Если вам не нужна анимация, вы можете попробовать решение, предоставленное в аналогичном вопросе . Текст будет написан снизу вверх.

Он поддерживает все основные функции TextView:

  • размер текста
  • цвет текста
  • текстовый шрифт
  • текстовое дополнение
  • использование через XML

Основная задача - переопределить методы onDraw() и onMeasure() на основе параметров вашего текста:

    @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);
            canvas.rotate(-90);
            canvas.drawText(this._text, 0, 0, this._textPaint);
        }
    }

    @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));
        }
    }

Пожалуйста, посмотрите Вертикальный (повернутый) ярлык в Android, чтобы увидеть полный исходный код.