I have implemented a list view where there is a requirement for text view ellipsis in the following format. I have a list of names that is populated on the text view. when its ellipsised, I need to show the remaining number of names as a count.
I have 6 names. When 3 of them are appended, it gets ellipsised; then it will show like this:
name1,name2,name...(+3)
My code:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
convertView = LayoutInflater.from(parent.getContext()).
inflate(R.layout.layout_item, parent, false);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
final String nameString = "name1,name2,name3,nam4,name5,nam6,name7";
ViewTreeObserver viewTreeObserver = holder.nameTextView.getViewTreeObserver();
if (viewTreeObserver.isAlive()) {
viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (Build.VERSION.SDK_INT < 16) {
removeLayoutListenerPre16(holder.nameTextView.getViewTreeObserver(), this);
} else {
removeLayoutListenerPost16(holder.nameTextView.getViewTreeObserver(), this);
}
updateEllipsizedText(holder.nameTextView, nameString);
}
});
}
return convertView;
}
private void updateEllipsizedText(TextView tv, String text) {
TextPaint p = tv.getPaint();
tv.setText(text);
float avail = tv.getMeasuredWidth();
String oneMore = "1 more";
String more = "%d more";
CharSequence ellipsizedText = TextUtils.commaEllipsize(text, p, avail,
oneMore, more);
tv.setText(ellipsizedText);
}
I have tried it with viewtreeobserver
in getView
of adapter, but it won't work. What can I do?