一.

在textview实现中英文展示,第一行不进行缩进,第一行之外进行缩进;

效果图:

代码:SpannableString spannableString =new SpannableString("1. 哈哈哈哈\n  2. 哈哈哈哈\n 3.哈哈哈\n ");

//0 第一行缩进像素 , SizeUtils.dp2px(15)非第一行缩进像素

LeadingMarginSpan.Standard what =new LeadingMarginSpan.Standard(0, SizeUtils.dp2px(15));

spannableString.setSpan(what, 0, spannableString.length(), SpannableString.SPAN_INCLUSIVE_INCLUSIVE);

textview.setText(spannableString);

/**

* dp转px

*

* @param dpValue dp值

* @return px值

*/

public static int dp2px(float dpValue) {

final float scale = Utils.getContext().getResources().getDisplayMetrics().density; return (int)         (dpValue * scale + 0.5f);

}

二:

如果想实现带缩进,并且英文文字铺满整行,可使用下面的方法;

效果图:

代码如下:

public class TextviewUtils {

/**

* 文本在indent 之后的字符对齐

* 此方法必须在view绘制完成后调用才生效

* getViewTreeObserver().addOnGlobalLayoutListener()

*

* @param tv    TextView控件

* @param indent 标题,如 1.  或  一.

* @return 新的带换行的字符串

*/

public static String autoSplitText(final TextView tv, final String indent) {

final String rawText = tv.getText().toString(); //原始文本

final Paint tvPaint = tv.getPaint(); //paint,包含字体等信息

final float tvWidth = tv.getWidth() - tv.getPaddingLeft() - tv.getPaddingRight(); //控件可用宽度

//将缩进处理成空格

String indentSpace = "";

float indentWidth = 0;

if (!TextUtils.isEmpty(indent)) {

float rawIndentWidth = tvPaint.measureText(indent);

if (rawIndentWidth < tvWidth) {

while ((indentWidth = tvPaint.measureText(indentSpace)) < rawIndentWidth) {

indentSpace += " ";

}

}

}

//将原始文本按行拆分

String[] rawTextLines = rawText.replaceAll("\r", "").split("\n");

StringBuilder sbNewText = new StringBuilder();

for (String rawTextLine : rawTextLines) {

if (tvPaint.measureText(rawTextLine) <= tvWidth) {

//如果整行宽度在控件可用宽度之内,就不处理了

sbNewText.append(rawTextLine);

} else {

//如果整行宽度超过控件可用宽度,则按字符测量,在超过可用宽度的前一个字符处手动换行

char[] splitWord = rawTextLine.toCharArray();

float lineWidth = 0;

for (int cnt = 0; cnt != splitWord.length; ++cnt) {

char ch = splitWord[cnt];

//从手动换行的第二行开始,加上悬挂缩进

if (lineWidth < 0.1f && cnt != 0) {

sbNewText.append(indentSpace);

lineWidth += indentWidth;

}

lineWidth += tvPaint.measureText(String.valueOf(ch));

if (lineWidth <= tvWidth) {

sbNewText.append(ch);

} else {

sbNewText.append("\n");

lineWidth = 0;

--cnt;

}

}

}

sbNewText.append("\n");

}

//把结尾多余的\n去掉

if (!rawText.endsWith("\n")) {

sbNewText.deleteCharAt(sbNewText.length() - 1);

}

return sbNewText.toString();

}

}

如何使用:textview.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener()

{

@Override public void onGlobalLayout() {                 mDesc.getViewTreeObserver().removeOnGlobalLayoutListener(this);

final String newText = TextviewUtils.autoSplitText(mDesc , "1. ");

if (!TextUtils.isEmpty(newText)) {

textview.setText(newText);

}

}});

android 字符串缩进换行换行,Android Textview第二行缩进/悬挂缩进相关推荐

  1. word段落每行首字怎么对齐_Word教程:段落格式设置:首行左右悬挂缩进及五种对齐方式...

    Word 教程: 段落格式设置: 首行左右悬挂缩进及五种对齐方 式 嗨,各位亲,见面么么哒 ~~~ 前面的课程中李老师带大 家学习了一个重要的知识点: Word 文本格式的设置. 相信各 位小伙伴们都 ...

  2. css div 悬挂缩进_CSS中的经典字体效果:悬挂缩进

    css div 悬挂缩进 A hanging indent, or hanging paragraph, is a paragraph in which the opening line is lef ...

  3. android 字符串 双引号,如何将TextView 字符串添加“” 双引号

    如何将TextView字符串添加双引号,例如"我是谁" 之前有些人提议写在布局文件里面 例如: android:text="点击"\我\" 但是很抱歉 ...

  4. android字符串加删除线,android textview 添加上划线 中划线 删除线

    很简单:两个例子一样 例如1: android textview 添加下划线 中划线 删除线 tv=(TextView)findViewById(R.id.tvId); tv.getPaint().s ...

  5. android字符串加删除线,android TextView 设置和取消删除线的两种方法

    一.TextView 设置删除线有两种方式: (推荐)方式一: 通过按位或运算符|,将 TextView 原本的 Flags 属性和删除线一块设置.setPaintFlags内会对 TextView ...

  6. android字符串块,一种Android系统字符串提取及合并方法与流程

    本发明涉及字符串提取及合并方法,尤其涉及一种Android系统字符串提取及合并方法. 背景技术: 随着智能通讯终端的日益普及,采用Android系统的智能通讯终端设备越来越走向世界各地,而对于多国语言 ...

  7. android字符串点击事件,Android匹配字符串高亮并设置点击事件

    public class TextRichUtil { public interface RichClickLisentner { void onClick(); } /** * 获取高亮字符串 * ...

  8. android 字符串相似度对比,Android中的OpenCV图像比较和相似度

    Andrii Omelc.. 7 但是我们可以看到两个图像都具有相同的视觉元素(in). 因此,我们应该比较不是整个图像,而是"相同的视觉元素".Match如果不比较"模 ...

  9. CSS实现首行缩进和悬挂缩进

    首行缩进 text-indent控制首行缩进,后加缩进长度,数值可正可负,单位可以是em,百分比,或者绝对单位.以数值2为例,取值可以是: 1. 2em 参见em,相对长度单位,为父元素文本字体尺寸的 ...

  10. android简单实现表格布局,Android开发中TableLayout表格布局

    Android开发中TableLayout表格布局 一.引言 在移动端应用程序开发中,常常会使用到表格布局,iOS和Android开发框架中都提供了独立的表格视图控件供开发者使用,例如iOS中的UIT ...

最新文章

  1. php tp 查数据库数据一条_php读取数据库乱码
  2. 关于element-ui 中使用Notice组件(Message、MessageBox、Notification)所遇到的坑
  3. 在网上找了一些j2ee的视频教程,有需要的朋友可以看看
  4. 使用变量_存储过程和函数及变量的使用
  5. 华为史上最大规模升级!鸿蒙系统进度发布:近百款机型已适配
  6. 可以叫板Google的一个搜索引擎 —— DuckDuckGo
  7. 7-13 镖局运镖 (10 分)
  8. 乐高解魔方机器人编程百度网盘_砍人快乐 喜剧 / 惊悚 / 恐怖 网盘资源目录搭建...
  9. Android 属性动画简单说明前篇(一)
  10. 大连IT产业解析(2人才篇)
  11. 海洋测绘 知识点 详细
  12. MCU裸系统下快速平方根实现
  13. 七面蚂蚁金服,超硬核面经,已拿Offer!!
  14. 帽子接球小游戏(一)--制作UI面板
  15. 战德臣计算机思维导论第二讲,2020秋大学计算机-计算思维导论SPOC(战德臣)
  16. 教你解决Wifi共享精灵网络共享失败的问题
  17. 查询每科成绩前3和第3的学生
  18. 基因工程-2-基因工程工具酶
  19. 【python】python获取当前py文件的文件名
  20. PayPal(贝宝) Webhooks使用

热门文章

  1. xpath之根据节点获取兄弟节点
  2. CarEye GT1078 转GB28181 方案
  3. 《活出生命的意义》阅读笔记
  4. C++身份证校验码计算器
  5. CAD梦想画图中的“打断命令”
  6. 微信公众号oauth授权
  7. Mac常见问题:如何使用文件保险箱加密 Mac 上的启动磁盘!
  8. windows 截图软件——sharex 截图软件的天花板 并且是免费开源的。
  9. Android 10.0 webview版本升级的方法
  10. NB-IoT物联网技术