android中textview竖排显示,只能说功能实现了
2015-12-10 23:49
786 查看
今天要做一个项目,要做竖排显示,纠结了一下午 也没有个头绪,一般都是加换行符或者设置一行一个字,但是只能显示一列,回来之后看到看到有人用二维数组来实现的,我也就想了一下
<span style="font-size:14px;">package com.example.templatetest.utils;
import android.graphics.Paint;
import android.graphics.Paint.FontMetrics;
import android.widget.TextView;
public class VerTextView {
public static StringBuilder getTextHtoV(String strText,double txtHeight,TextView txt){
StringBuilder sb = new StringBuilder();
int rows = 0;
int row = (int)(txtHeight/getFontHeight(txt.getTextSize()));//一列多少字即多少行
int line = strText.length()/row +1;//多少列
int yu = strText.length()%row;
if (row > strText.length()) {
rows = strText.length();
}else{
rows = row;
}
for (int i = 0; i < yu; i++) {
for (int j = 0; j < line; j++) {
sb.append(strText.substring(i+j * row,i+j * row +1));
sb.append(" ");
}
sb.append("\n");
}
for (int i = yu; i < rows; i++) {
for (int j = 0; j < line - 1; j++) {
sb.append(strText.substring(i+j * row,i+j * row +1));
sb.append(" ");
}
sb.append("\n");
}
return sb;
}
//获取字体高度
public static int getFontHeight(float fontSize)
{
Paint paint = new Paint();
paint.setTextSize(fontSize);
FontMetrics fm = paint.getFontMetrics();
return (int) Math.ceil(fm.descent - fm.top) + 2;
}
}</span>
思想就是根据textview的高度和字体的高度计算出一列展示多少个字,然后根据字体的个数除以一列多少个字得出行数,根据相应的算法拼接起来,可能有些地方不太严谨,先记一下
<span style="font-size:14px;">package com.example.templatetest.utils;
import android.graphics.Paint;
import android.graphics.Paint.FontMetrics;
import android.widget.TextView;
public class VerTextView {
public static StringBuilder getTextHtoV(String strText,double txtHeight,TextView txt){
StringBuilder sb = new StringBuilder();
int rows = 0;
int row = (int)(txtHeight/getFontHeight(txt.getTextSize()));//一列多少字即多少行
int line = strText.length()/row +1;//多少列
int yu = strText.length()%row;
if (row > strText.length()) {
rows = strText.length();
}else{
rows = row;
}
for (int i = 0; i < yu; i++) {
for (int j = 0; j < line; j++) {
sb.append(strText.substring(i+j * row,i+j * row +1));
sb.append(" ");
}
sb.append("\n");
}
for (int i = yu; i < rows; i++) {
for (int j = 0; j < line - 1; j++) {
sb.append(strText.substring(i+j * row,i+j * row +1));
sb.append(" ");
}
sb.append("\n");
}
return sb;
}
//获取字体高度
public static int getFontHeight(float fontSize)
{
Paint paint = new Paint();
paint.setTextSize(fontSize);
FontMetrics fm = paint.getFontMetrics();
return (int) Math.ceil(fm.descent - fm.top) + 2;
}
}</span>
思想就是根据textview的高度和字体的高度计算出一列展示多少个字,然后根据字体的个数除以一列多少个字得出行数,根据相应的算法拼接起来,可能有些地方不太严谨,先记一下
相关文章推荐
- Android Handler解析
- Android学习笔记(10).布局管理器
- Android IPC机制 b58a
- Android中常见的热门标签的流式布局的实现
- 译文:Android中糟糕的AsyncTask
- Android之如何实现通讯录的搜索并且让匹配到的数据变颜色
- android5.0自带兼容控件
- Android RecyclerView+CardView实现瀑布流效果
- android5.0自带兼容控件__SwipeRefreshLayout
- Android Graphics.drawable之—TransitionDrawable学习
- android studio上使用butter Knife
- Android
- Android仿QQ长按删除弹出框
- Android学习笔记——Android PullToRefresh (ListView,GridView 下拉刷新) 使用介绍
- Android源码解析之四:View事件分发机制
- Android异步任务处理之Thread线程
- Android 分组listview 简易实现方法
- Android 自定义View修炼-自定义加载进度动画XCLoadingImageView
- Ashmem 对 Android 内存分配与共享的增强
- Android粒子进度条