1. 今天忽然想嘚瑟一下,就在csdn上搞了个博客,发表我的处女文章.
2. 因为公司需求做一个蒙语显示的东东,最开始的时候想的是在textView上设置啊啥的,确实能实现换列的功能,但是在效果上差了很多,这个是借鉴一个git上的大神写的(名字忘记了,在此膜拜一下他的无私奉献),我在上面进行了一些优化:a默认最长的列为控件的高,b去掉了文字右排列的功能,保留左排列(需要的可以去git找原文)
/**多个竖列,空格符为换列标记**@author lvmin 2015-10-26*/
public class TextViewVertical extends View {private AttributeSet attrs;private Paint paint;private FontMetrics fm;private String text="";private int fontWidth = 0,fontHeight;// 字宽,字高private int viewWidt = 0,viewHeight = 0;// 视图的宽,高private float fontSize = 24;// 默认字体大小为24private int fontColor=Color.parseColor("#333333");// 默认字体颜色public TextViewVertical(Context context){super(context);initPaint();initFontInfo();}public TextViewVertical(Context context,AttributeSet attrs){super(context, attrs);this.attrs=attrs;initPaint();initFontInfo();}/**设置内容*/public void setText(String text){this.text = text;invalidate();requestLayout();}/**设置字体大小*/public final void setTextSize(float size) {if (size != paint.getTextSize()) {fontSize=size;initFontInfo();invalidate();requestLayout();}}/**设置字体颜色*/public final void setTextColor(int color) {if (color != paint.getColor()) {paint.setColor(color);invalidate();}}@Overrideprotected void onMeasure(int widthMeasureSpec,int heightMeasureSpec){// 为了初始化的时候获取到控件的高用于判断超出绘制的高度的后换列viewHeight = MeasureSpec.getSize(heightMeasureSpec);initMeasure(widthMeasureSpec, heightMeasureSpec);}private void initMeasure(int widthMeasureSpec,int heightMeasureSpec){int columnHeight = 0;// 当前列的高度int columnHeightMax = 0;// 缓存最大的高度int column = 1;// 列数char ch;for(int i = 0;i < text.length();i++){ch = text.charAt(i);if(ch == '\n'){column = column + 1;columnHeight = 0;}else{// 超出绘制的高度的后换列显示columnHeight += fontHeight;if(columnHeight > this.viewHeight){column++;// 换列i--;columnHeight = 0;}else{if(columnHeightMax < columnHeight){columnHeightMax = columnHeight;}}}}viewWidt = fontWidth * column;// 计算文字总宽度viewHeight = columnHeightMax + fontHeight / 2;// 计算最高高度int width = resolveSizeAndState_1(viewWidt, widthMeasureSpec, 0);int height = resolveSizeAndState_1(viewHeight, heightMeasureSpec, 0);setMeasuredDimension(width, height);}@Overrideprotected void onDraw(Canvas canvas){super.onDraw(canvas);drawFont(canvas);}private void drawFont(Canvas canvas){char ch;float fontX = fontWidth / 2;float fontY = 0;for(int i = 0;i < text.length();i++){ch = text.charAt(i);if(ch == '\n'){fontX += fontWidth;// 换列fontY = 0;}else{fontY += fontHeight;if(fontY > this.viewHeight){// 超出绘制的高度的后换列显示fontX += fontWidth;// 换列i--;fontY = 0;}else{canvas.drawText(String.valueOf(ch), fontX, fontY, paint);}}}}private void initPaint(){paint = new Paint();// 新建画笔paint.setTextAlign(Align.CENTER);// 文字居中paint.setAntiAlias(true);// 平滑处理if(attrs != null){try{fontSize = Float.parseFloat(attrs.getAttributeValue(null, "textSize"));// 获取字体大小属性fontColor= Integer.parseInt(attrs.getAttributeValue(null, "textColor"));// 获取字体大小属性text= attrs.getAttributeValue(null, "text");// 获取字体大小属性}catch(Exception e){}}}private void initFontInfo(){paint.setColor(fontColor);// 默认文字颜色paint.setTextSize(fontSize);// 获得字宽float[] widths = new float[1];paint.getTextWidths("正", widths);// 获取单个汉字的宽度fontWidth = (int) Math.ceil(widths[0] * 1.1 + 2);// 获得字属性fm = paint.getFontMetrics();fontHeight = (int) (Math.ceil(fm.descent - fm.top) * 0.9);//返回包围整个字符串的最小的一个Rect区域,但是在canvas.drawText()不好确定x,y位置
//      Paint pFont = new Paint();
//      Rect rect = new Rect();
//      pFont.getTextBounds(str, 0, 1, rect);
//      strwid = rect.width();
//      strhei = rect.height();}// 新的api(resolveSizeAndState)无法兼容3.0以下,所以挖出来private int resolveSizeAndState_1(int size,int measureSpec,int childMeasuredState){int result = size;int specMode = MeasureSpec.getMode(measureSpec);int specSize = MeasureSpec.getSize(measureSpec);switch(specMode){case MeasureSpec.UNSPECIFIED:result = size;break;case MeasureSpec.AT_MOST:if(specSize < size){result = specSize | 0x01000000;}else{result = size;}break;case MeasureSpec.EXACTLY:result = specSize;break;}return result | (childMeasuredState & 0xff000000);}}

TextViewVertical实现文字并列竖排 如古诗,蒙古语等相关推荐

  1. MnTTS: 开源蒙古语语音合成数据集及其基线模型

    本次分享内蒙古大学蒙古文信息处理重点实验室.蒙古文智能信息处理技术国家地方联合工程研究中心及语音理解与生成实验室 (S2LAB) (https://ttslr.github.io/index_S2Gr ...

  2. html怎么让表格竖排,表格里的文字怎么竖排

    大家好,我是智能客服时间君,上述问题将由我为大家进行解答. 表格里的文字设置竖排的操作方法如下: 1.打开需要编辑的excel文档,选中相关文字的单元格. 2.右键点击该单元格,在对话框里找到&quo ...

  3. HTML图片和多行文字并列显示

    上课涉及到一点HTML编程,有的时候网页上有图片和多行文字并列显示的情况,类似下面的简历那样: 查阅了一些方法,才得以实现.记录在这里,以备后用,也方便后来人. 首先,可以采用无边框table实现图片 ...

  4. html table文字竖,表格里的文字怎么竖排

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. 表格里的文字设置竖排的操作方法如下: 1.打开需要编辑的excel文档,选中相关文字的单元格. 2.右键点击该单元格,在对话框里找 ...

  5. html汉子竖着显示,html文字怎么竖排显示

    有些时候我们需要一段文字从上到下竖着显示排班,那么在CSS里需要怎么操作才能让文字在网页端是竖排显示呢?今天来给大家解答一下这个疑惑 有时我们需要一段文字进行从上到下竖列排版,我们知道CSS样式中有一 ...

  6. 怎样把文字调成竖排_怎么把文字变成竖排

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. 以word为例,把文字变成竖排的方法如下: 1.打开Word文档,将光标定位到文档任意位置. 2.在功能区切换至"布局& ...

  7. 赛效:WPS中怎么把文字变成竖排?

    了解更多关于办公工具的相关应用,大家可选择到赛效官网查看更多~ 在WPS中添加文本记事时,有些文字性的内容是需要变成竖排排列的,很多上班族对WPS的一些相关的功能了解的并不清楚,因此并不清楚怎么将文字 ...

  8. css表格文字超数量就竖排_利用CSS如何实现文字的竖排

    本篇文章给大家带来的内容是关于利用CSS如何实现文字的竖排,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 样式表的文字处理属性中有两个重要的属性:writing-mode和text- ...

  9. 关于蒙古语输入法的研究

    关于蒙古语输入法的研究 现市场上蒙古语言输入法比较少,操作系统支持蒙古语输入需要配置,这里指的是手机操作系统,蒙古语输入普及还需要一段时间. 蒙古语是竖排字体,和传统编辑本的工具不匹配,导致系统输入时 ...

最新文章

  1. CNN阴影去除--DeshadowNet: A Multi-context Embedding Deep Network for Shadow Removal
  2. Wannafly挑战赛21 E 未来城市规划
  3. 101个脚本之linux回收站
  4. OkHttp3中的代理与路由
  5. 信息学奥赛一本通 1095:数1的个数 | OpenJudge NOI 1.5 40
  6. [转]亚稳态和毛刺 - Metastability and Hazard(CN)
  7. 必须放在特定的文件夹中才能运行的Python程序
  8. 基于深度学习的短视频内容分析简介
  9. AWVS13批量脚本
  10. linux 常用软件推荐
  11. 【EMC电磁兼容】01.12——差模与共模
  12. aria2 网页版服务器错误,aria2服务器错误
  13. 红外论文:在不同场景下的距离对红外测温的影响
  14. 荆楚理工学院计算机科学专业,2017荆楚理工学院专业排名
  15. 五、python实现人工蜂群算法(简单明了版)
  16. 32位PowerPC构架通用寄存器分析及总结一
  17. error C2065: “IDOK” : 未声明的标识符
  18. 从头撸JavaScript--数组
  19. AI人工智能到底会给人类带来哪些危害,同样也会带来什么利好?
  20. 【九层之台】Web开发教程:8. 设计

热门文章

  1. 【计算机网络】数据报与虚电路
  2. 改变学习模式,在课外学习中获得突破
  3. MATLAB-plot3/ezplot3三维绘图
  4. 三维电子沙盘卫星图片矢量地图高程数据来源
  5. Desire(G7) 联通3g上网与彩信的设置方法
  6. python返回文件所在目录
  7. 统计qq一天中每秒在线人数
  8. Android自定义控件 - 彩虹表盘
  9. ElasticSearch分布式搜索引擎从入门到实战应用(入门篇-基本命令操作)
  10. 【Pygame合集】滴~穿越童年游戏指南 请查收:这里面有你玩过的游戏嘛?(附五款源码自取)