字符串 省略 号 适配 一个点 两个点 等换成自己的省略号 EllpsizeString with endString

//这个方法我已经修改了,完全可用
package com.example.camerademo.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import android.util.Log;

public class EllpsizeUtils_DingChang {

	/**
	 * 字符串的单个字符是否是汉字
	 * 
	 * @param c
	 *            单个字符
	 * @return 字符对应的ASCIIS 值, 负值 是汉字;
	 */
	public static int ascii(String c) {
		byte x[] = new byte[2];// 这里是两个元素
		x = c.getBytes();// 按照原有的 编码格式生成字节数组;

		// x=c.getBytes("utf-8");// 按照什么编码格式生成 字节数组;
		// x=c.getBytes(srcBegin, srcEnd, dst, dstBegin);

		if (x == null || x.length > 2 || x.length <= 0) {// 没有字符,为空字符串(空格也是字符串)
			return -1;
		}
		if (x.length == 1) {// 英文字符
			return 1;
		}
		Pattern p=Pattern.compile("[\u4e00-\u9fa5]");
	    Matcher m=p.matcher(c);
	     if(m.matches()){
//	      Toast.makeText(Main.this,"输入的是汉字", Toast.LENGTH_SHORT).show();
	    	 return -1;
	     }

		return 0;
	}

	/**
	 * 去掉首位空格,做其它处理
	 * 
	 * @param string
	 * @return
	 */
	public static String goodStr(String string) {

		string = string.trim();
		return string;
	}
<span style="white-space:pre">	</span>/**
<span style="white-space:pre">	</span> * 判断 有多少个 汉字  长度 取整数
<span style="white-space:pre">	</span> * @param string
<span style="white-space:pre">	</span> * @return
<span style="white-space:pre">	</span> */
	public static int letterSum(String string) {
		if (null != string) {
			string = goodStr(string);// 这个函数是干什么用处的?去掉 首位空格
			if (string.length() <= 0) {
				return 0;
			} else {
				String str;
				double len = 0;
				for (int i = 0; i < string.length(); i++) {
					// 是否是汉字 ascii<0;
					str = string.substring(i, i + 1);
					if (ascii(str) < 0) {
						len++;
					} else {
						len += 0.5;
					}
					
				}
				Log.e("num", (int) Math.round(len)+";  len="+ len);
				return (int) Math.round(len);
			}
		}
		return 0;

	}
	/**
	 * 获取 多少的 字符串
	 * 
	 * @param string
	 *            字符串数据,
	 * @param size
	 *            要获取的长度 ( 是长度 不是字符个数,是长度):中文为一个,英文为0.5个
	 *            注意:假设有十个长度:全为中文,则为10个汉字;20个字母, 若某字符串字符数小于 10,则该字符串没有达到省略要求;
	 * @return
	 */
	public static String limitStr(String string, int size) {// 要多长的 字符串
		if (null != string) {
			string = goodStr(string);// 这个函数是干什么用处的?去掉 首位空格
			if (string.length() <= size) {
				return string;
			} else {
				StringBuffer buffer = new StringBuffer();
				String str;
				double len = 0;
				for (int i = 0; i < string.length(); i++) {
					// 是否是汉字 ascii<0;
					str = string.substring(i, i + 1);
					if (ascii(str) < 0) {
						buffer.append(str);
						len++;
					} else {
						buffer.append(str);
						len += 0.5;
					}
					if (len >= size)
						break;
				}
				return buffer.toString();
			}
		}
		return "";

	}

	/**
	 * 获取 以特定 字符串endStr 为结尾的字符串, 
	 * 
	 * @param strData 字符串数据
	 * @param size
	 * @param endStr
	 * @return  返回以特定省略符号为结尾的字符串
	 */
	public static String limitStr_Ending(String strData, int size, String endStr) {
		strData = goodStr(strData);//去掉首位空格
		if (size < endStr.length() || strData.length() < endStr.length()) {// 结尾的字符串过长,子以
																			// 结尾的字符串为主
			Log.e("endStr is too long","endStr is too long! Please cut it.");
		}
		String  cutStr;
		cutStr = limitStr(strData, size);
		if (cutStr.length()!=strData.length()) {//如果字符串被裁减了 则执行下面操作
			cutStr = cutStr.substring(0, cutStr.length() - letterSum(endStr))+ endStr;
		}

		return cutStr;
	}
}



另一个方法是我自己写,但是没上面那个好:
我使用的是第三个方法,在使用的时候传入的dp值和你的dp小点(-10dp):public static String textEllpsize(TextView textContent,String textStr,Context context,int dp) 这个方法成熟,前面两个不成熟,
package com.example.camerademo.utils;

import android.R.integer;
import android.content.Context;
import android.text.TextPaint;
import android.text.TextUtils;
import android.util.Log;
import android.view.View.MeasureSpec;
import android.widget.TextView;

//(textview_content); 
public class EllipsizeUtils {

	private static int getAvailableWidth(TextView folder_library) {
		return folder_library.getWidth() - folder_library.getPaddingLeft()
				- folder_library.getPaddingRight();// 控件宽度-左边内间距-右边内间距==TextView的内容间距
	}

	public static boolean isOverFlowed(TextView folder_library) {
		TextPaint paint = folder_library.getPaint();
		float widthPaint = paint.measureText(folder_library.getText().toString().trim());// 获取字符串的长度(距离,不是字符个数)
//			Log.e("widthPaint  WidthTextView", 
//					"widthPaint = "+widthPaint+
//					" WidthTextView = "+getAvailableWidth(folder_library));
		if (widthPaint >= getAvailableWidth(folder_library))

			return true;
		//还有一种情况会出现,就是   数字符串很长,还是会出现一个点,下面的方法 已经解决了
		return false;
	}
	/**
	 * 使用方法:
	 * 	1.把 xml 的 Ellpsize 去掉,Singleline=true 
	 * 	3.传入一个有内容的 TextView,若字符串过长,设置成指定 省略符号的字符串
	 * 
	 * @param textContent
	 */
//	public  static void  textEllpsize(TextView textContent) {
//		if (TextUtils.isEmpty(textContent.getText())) {
//			return;
//		}
//		
//		
//		// 获得 首尾没有空格的字符串 的长度
//		String strEllpsize = textContent.getText().toString().trim();
//		Log.e("啊啊111111textEllpsize=",  strEllpsize);
//		if (isOverFlowed(textContent)) {
//			int indexLocation=getAvailableWidth(textContent);
//			System.out.println("indexlocation:" + indexLocation);
//			TextPaint paint = textContent.getPaint();
//			System.out.println("paint:"+paint);
//			String ellipsizeStr = TextUtils.ellipsize(strEllpsize,paint, indexLocation,TextUtils.TruncateAt.END).toString();//
//			Log.e("啊啊222222textEllpsize=",  ellipsizeStr+"*********");
			String ellipsizeStr2 = ellipsizeStr.substring(0, ellipsizeStr.length()- 3) + "***";// 如何获取开始 省略位置的脚标		
//			
//			// 此时将TextView 设置成指定省略 符号的 字符串
//			textContent.setText(ellipsizeStr);
//			Log.e("nowEllpsizeContent", "nowEllpsizeContent = "+ellipsizeStr);
//		}
//	}
	
	public static String  textEllpsize(TextView textContent,String textStr,Context context,int dp) {
//		if (textContent!=null) {
			textStr="";
//			return "";
//		}
		int defaultDP=200;
		if (dp>0) {
			defaultDP =dp;
		}
		 float scale = context.getResources().getDisplayMetrics().density;
		 	
//		 	int widthPx=200*2;
		 float widthPx=defaultDP*scale + 0.5f;
		 Log.e("*widthPx*********", "widthPx = "+widthPx+"textStr = "+textStr+"scale = "+scale);//800.5 400 
		 
		TextPaint paint = textContent.getPaint();
		textStr=textStr.trim();
		float strwidth = paint.measureText(textStr);
		 Log.e("*strwidth***widthPx******", strwidth+"**********"+widthPx);
		if (strwidth > widthPx){
			// 根据长度截取出剪裁后的文字    *0.8
			String ellipsizeStr = (String) TextUtils.ellipsize(textStr, paint, widthPx*0.9f,TextUtils.TruncateAt.END);
//			Log.e("*ellipsizeStr******","=="+ellipsizeStr);
			ellipsizeStr=ellipsizeStr.substring(0, ellipsizeStr.length()-3)+"...";
			Log.e("*ellipsizeStr******","=="+ellipsizeStr);
			return ellipsizeStr;
		
		}
		return textStr;
	}

}


 

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值