android edittext 如何使文字竖排显示

最近有个需求,让android的editText组件竖排从左到右从上到下显示文字。不知道大家有什么思路?到底应该从哪个类开始扩展呢~... 最近有个需求,让android的editText组件竖排从左到右从上到下显示文字。不知道大家有什么思路?
到底应该从哪个类开始扩展呢~
展开
 我来答
bmk_tjMr時光漫
2014-11-14 · 超过83用户采纳过TA的回答
知道答主
回答量:154
采纳率:0%
帮助的人:62.2万
展开全部
  在android.graphics.Canvas类中有个沿路径画字的方法
  void drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint)
  Draw the text, with origin at (x,y), using the specified paint, along the specified path.
  void drawTextOnPath(char[] text, int index, int count, Path path, float hOffset, float vOffset, Paint paint)
  Draw the text, with origin at (x,y), using the specified paint, along the specified path.

  Test.java代码://需要在layout中定义Test,且设置背景,在java代码中设置test Text

  public class Test extends View {

  private Paint paint;
  private Path path;
  private Matrix matrix;
  private int width = -1;
  private int height = -1;
  private float left = 3;
  private float top = 18;
  private String title = "";
  BitmapDrawable drawable = (BitmapDrawable) getBackground();

  public Test(Context context, AttributeSet attrs) {
  super(context, attrs);
  paint = new Paint();
  paint.setColor(Color.WHITE);//定义字体颜色
  paint.setTextSize(14);//定义字体大小
  path = new Path();
  path.lineTo(0,500);//定义字符路径
  matrix = new Matrix();
  Log.v("onMeasure", "2");
  }

  @Override
  protected void onDraw(Canvas canvas) {
  //画背景
  Bitmap b = Bitmap.createBitmap(drawable.getBitmap(),0,0,width,height);
  canvas.drawBitmap(b, matrix, paint);
  //画字
  showText(canvas, title);
  }

  private void showText(Canvas canvas, String text){
  float w;
  final int len = text.length();
  float py = 0 + top;
  for(int i=0; i<len; i ++){
  char c = text.charAt(i);
  w = paint.measureText(text, i, i+1);//获取字符宽度
  StringBuffer b = new StringBuffer();
  b.append(c);
  if(py > 81){//定义字的范围
  return;
  }
  if(isChinese(c)){
  py += w;
  if(py > 81){
  return;
  }
  canvas.drawText(b.toString(), left, py, paint); //中文处理方法
  }else {
  canvas.drawTextOnPath(b.toString(), path, py, -left-2, paint);//其他文字处理方法
  py += w;
  }
  }
  }

  public void setText(String title){
  this.title = title;
  }

  public String getText(){
  return title;
  }

  private boolean isChinese(char c) {
  Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
  if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
  || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
  || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
  || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION
  || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
  || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {
  return true;
  }
  return false;
  }

  //重写View大小方法,使view大小为背景图片大小
  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  // super.onMeasure(widthMeasureSpec, heightMeasureSpec);
  if (null != getBackground()) {

  int h = drawable.getIntrinsicHeight();
  int w = drawable.getIntrinsicWidth();
  Log.v("onMeasure", "null != getBackground() h:" + h + " w:" + w);
  width = w;
  height = h;
  setMeasuredDimension(w, h);
  } else {
  width = widthMeasureSpec;
  height = heightMeasureSpec;
  super.measure(widthMeasureSpec, heightMeasureSpec);
  }
  }

  }

  在Android中,若要通过程序改变屏幕显示的方向,必须要覆盖setRequestedOrientation()方法,而若要取得目前的屏幕方向,则需要访问getRequestedOrientation()方法。本范例为求简要示范更改做法,设计了一个按钮,当单击按钮的同时,判断当下的屏幕方向,例如竖排(PORTRAIT),则将其更改为横排(LANDSCAPE);若为横排(LANDSCAPE),则将其更改为竖排(PORTRAIT)
追问
我用过Test.java代码,可是显示不了文字内容,如何显示内容呢?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式