This is a simple demo on aligning a text in Android. You can check out for more details at the developers site.
This code explains how to write a String or text on a canvas and how to give it a custom font or inbuilt font programatically, change the color of the text or canvas or change the size of the text etc.
Check out this example. You don’t need a layout for this since the view is created in the java code itself.
Now go on and copy the code into your project and you are done.
package pack.coderzheaven; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.Typeface; import android.os.Bundle; import android.view.View; public class TextAlignDemo extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView( new SampleView( this )); } private static class SampleView extends View { private Paint mPaint; private float mX; private float [] mPos; private Path mPath; private Paint mPathPaint; private static final int DY = 30 ; private static final String TEXT_L = "Left" ; private static final String TEXT_C = "Center" ; private static final String TEXT_R = "Right" ; private static final String POSTEXT = "Positioned" ; private static final String TEXTONPATH = "Along a path" ; private static void makePath(Path p) { p.moveTo( 10 , 0 ); p.cubicTo( 100 , - 50 , 200 , 50 , 300 , 0 ); } private float [] buildTextPositions(String text, float y, Paint paint) { float [] widths = new float [text.length()]; // initially get the widths for each char int n = paint.getTextWidths(text, widths); // now popuplate the array, interleaving spaces for the Y values float [] pos = new float [n * 2 ]; float accumulatedX = 0 ; for ( int i = 0 ; i < n; i++) { pos[i* 2 + 0 ] = accumulatedX; pos[i* 2 + 1 ] = y; accumulatedX += widths[i]; } return pos; } public SampleView(Context context) { super (context); setFocusable( true ); mPaint = new Paint(); mPaint.setAntiAlias( true ); mPaint.setTextSize( 30 ); mPaint.setTypeface(Typeface.SERIF); mPos = buildTextPositions(POSTEXT, 0 , mPaint); mPath = new Path(); makePath(mPath); mPathPaint = new Paint(); mPathPaint.setAntiAlias( true ); mPathPaint.setColor( 0x800000FF ); mPathPaint.setStyle(Paint.Style.STROKE); } @Override protected void onDraw(Canvas canvas) { canvas.drawColor(Color.WHITE); Paint p = mPaint; float x = mX; float y = 0 ; float [] pos = mPos; // draw the normal strings p.setColor( 0x80FF0000 ); canvas.drawLine(x, y, x, y+DY* 3 , p); p.setColor(Color.BLACK); canvas.translate( 0 , DY); p.setTextAlign(Paint.Align.LEFT); canvas.drawText(TEXT_L, x, y, p); canvas.translate( 0 , DY); p.setTextAlign(Paint.Align.CENTER); canvas.drawText(TEXT_C, x, y, p); canvas.translate( 0 , DY); p.setTextAlign(Paint.Align.RIGHT); canvas.drawText(TEXT_R, x, y, p); canvas.translate( 100 , DY* 2 ); // now draw the positioned strings p.setColor( 0xBB00FF00 ); for ( int i = 0 ; i < pos.length/ 2 ; i++) { canvas.drawLine(pos[i* 2 + 0 ], pos[i* 2 + 1 ]-DY, pos[i* 2 + 0 ], pos[i* 2 + 1 ]+DY* 2 , p); } p.setColor(Color.BLACK); p.setTextAlign(Paint.Align.LEFT); canvas.drawPosText(POSTEXT, pos, p); canvas.translate( 0 , DY); p.setTextAlign(Paint.Align.CENTER); canvas.drawPosText(POSTEXT, pos, p); canvas.translate( 0 , DY); p.setTextAlign(Paint.Align.RIGHT); canvas.drawPosText(POSTEXT, pos, p); // now draw the text on path canvas.translate(- 100 , DY* 2 ); canvas.drawPath(mPath, mPathPaint); p.setTextAlign(Paint.Align.LEFT); canvas.drawTextOnPath(TEXTONPATH, mPath, 0 , 0 , p); canvas.translate( 0 , DY* 1 .5f); canvas.drawPath(mPath, mPathPaint); p.setTextAlign(Paint.Align.CENTER); canvas.drawTextOnPath(TEXTONPATH, mPath, 0 , 0 , p); canvas.translate( 0 , DY* 1 .5f); canvas.drawPath(mPath, mPathPaint); p.setTextAlign(Paint.Align.RIGHT); canvas.drawTextOnPath(TEXTONPATH, mPath, 0 , 0 , p); } @Override protected void onSizeChanged( int w, int h, int ow, int oh) { super .onSizeChanged(w, h, ow, oh); mX = w * 0 .5f; // remember the center of the screen } } } |
Please leave your valuable comments on this post.