永发信息网

android edittext 如何使文字竖排显示

答案:2  悬赏:30  手机版
解决时间 2021-03-22 10:20
最近有个需求,让android的editText组件竖排从左到右从上到下显示文字。不知道大家有什么思路?
到底应该从哪个类开始扩展呢~
最佳答案
在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   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)
全部回答
getwindow().setsoftinputmode(windowmanager.layoutparams.soft_input_state_visible|windowmanager.layoutparams.soft_input_adjust_resize);
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
求专业人士看下乳腺B超检查报告,挺担心的,
搞笑足球标语口号,关于足球比赛的口号宣言 12
公众知情权的软肋不在于网民缺席阅读答案
配电房电容柜功率因数提高是不是只是外线供电
绍兴市袍江安达汽车轮胎经营部在什么地方啊,
鬼字加个离念什么字
一餐不吃饭就拉肚子,怎么了
exo所有的mv打包下载 百度云
祝福女生生日经典话语,关于友情的唯美的句子
小乐车城我想知道这个在什么地方
如果两个相似三角形的相似比是3:5,周长的差
三年级作文我和哥哥骑车比赛范文
春天到了唯美句子,写几句描写春天的句子
删除手机qq后,再安装表情怎么找回
老徽州咸肉菜饭骨头汤地址有知道的么?有点事
推荐资讯
4a的纸张多大?请表回答几毫米什么的专业术语,
沈阳塑料制品有限公司我想知道这个在什么地方
苏州大学外国语学院二级学院吗
固定抵押和浮动抵押的区别
《我爱大海》读后感
回家过年给小侄女买什么呢
已知一个点的坐标是(-3,4),那么这个点关
ls,there,any,soup作否定回答
如何约上协和医院影像科张波主任的号
60% 棉40%涤纶的衣服可以水洗吗?
女生 一米五五 一百二十五斤 穿多大码的衣服
。take part in look after heard of has b
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?