Est-il possible d'écrire verticalement dans une vue de texte dans Android?

Disons que vous avez un TextView normal, avec "Stackoverflow" écrit dedans, Est-il possible de faire pivoter le TextView de -90 °, pour avoir le S en bas et le W en haut de l'écran? Bien sûr, je pourrais écrire mon texte en tant qu'image, le faire pivoter et l'utiliser de cette façon, mais je suis intéressé par le texte maintenant. Merci.

  • Comment utiliser une glisse pour télécharger une image dans un bitmap?
  • Essayer de transférer POI d'Apache vers Android
  • La meilleure façon de montrer un indicateur de chargement / progression?
  • Utilisation des classes BufferedImage et ImageIO dans mon activité Android
  • Impossible de mélanger le fichier audio et le fichier vidéo via MediaMuxer?
  • Comment puis-je créer un élément de menu Android à l'aide de l'icône de réglage Android
  • Où est jarsigner?
  • Conversion de GLSurfaceView en TextureView (via GLTextureView)
  • Autorisation de lire les données de la carte SD
  • DialogFragment disparaît lors de la rotation en dépit de setRetainInstance (true)
  • Android Eclipse - Impossible de voir l'option de traitement de l'annotation
  • Mix of TabListener, ActionBarSherlock Fragment et ListFragment, PageAdapter? Un gâchis
  • 5 Solutions collect form web for “Est-il possible d'écrire verticalement dans une vue de texte dans Android?”

    Vous pouvez définir votre vision de texte comme vous le feriez normalement

    par exemple:

    <TextView android:id="@+id/txtview" android:layout_height="fill_parent" android:layout_width="wrap_content" /> 

    Et écrivez une fonction dans votre activité à

    • Renverser les caractères dans votre texte
    • Insérer \n après chaque personnage

    Puis configurez le texte dans TextView.

    Si vous ne voulez pas insérer le \n , vous devrez définir la taille de l'application android:layout_width et jouer avec la taille de la police pour ne pas avoir 2 caractères appropriés sur la même ligne et pas de troncation

    Edit Si je vous ai bien compris, vous pouvez obtenir ce que vous voulez en utilisant l'animation.

    Par exemple

    Sous res/animation/myanim.xml :

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

    Vous devrez jouer avec ce fichier pour définir où vous souhaitez que votre vue de texte soit placée.

    Dans votre activité:

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

    J'ai travaillé pour moi:

     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:

     <VerticalTextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="left|center_vertical" android:background="@color/feedback_background" android:padding="4dip" android:text="@string/feedback" android:textColor="@color/feedback_text_color" android:textSize="@dimen/text_xlarge" /> 

    Essaye ça. Ça fonctionne bien pour moi. Il peut afficher une seule ligne de texte verticalement, mais une seule ligne. Les couleurs, la taille, les rembourrages, les marges et l'arrière-plan fonctionnent bien.

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

    Si vous utilisez API 11 ou plus tard, vous pouvez essayer:

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

    Nous pouvons configurer Rotation avec vue XML

      <TextView android:id="@+id/txtview" android:rotation="-90" android:text="123" android:layout_height="wrap_content" android:layout_width="wrap_content" /> 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.