Android 在显示布局之前检测TextVIew是否已椭圆化
我有一个最多3行的文本视图,下面有一个“显示更多”按钮。其逻辑是,如果文本视图中的文本可以放入其中,“显示更多”按钮被隐藏;否则,如果文本无法容纳3行,则会显示“显示更多” 我的方法(不起作用)是:通过使用Android 在显示布局之前检测TextVIew是否已椭圆化,android,android-layout,Android,Android Layout,我有一个最多3行的文本视图,下面有一个“显示更多”按钮。其逻辑是,如果文本视图中的文本可以放入其中,“显示更多”按钮被隐藏;否则,如果文本无法容纳3行,则会显示“显示更多” 我的方法(不起作用)是:通过使用TextView.getLayout().getEllipsIscont(maxNumberOfline)检测TextView是否被省略,然后隐藏或显示“显示更多”按钮。但是当布局尚未完成时,调用textView.getLayout()返回null。我试图将textView.getLayout
TextView.getLayout().getEllipsIscont(maxNumberOfline)
检测TextView是否被省略,然后隐藏或显示“显示更多”按钮。但是当布局尚未完成时,调用textView.getLayout()返回null。我试图将textView.getLayout().getEllipsisCount(maxNumberOfline)
放入onStart()
和onResume()
中,但没有成功
有人有其他方法吗?试试这种方法,希望这能帮助你解决问题。
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textview = (TextView) findViewById(R.id.textview);
textview.setText("demotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotext");
TextViewResizable(textview,3,"See More");
}
public void TextViewResizable(final TextView tv,final int maxLine, final String expandText) {
if (tv.getTag() == null) {
tv.setTag(tv.getText());
}
ViewTreeObserver vto = tv.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@SuppressWarnings("deprecation")
@Override
public void onGlobalLayout() {
ViewTreeObserver obs = tv.getViewTreeObserver();
obs.removeGlobalOnLayoutListener(this);
if (maxLine <= 0) {
int lineEndIndex = tv.getLayout().getLineEnd(0);
String text = tv.getText().subSequence(0,lineEndIndex - expandText.length() + 1)+ " " + expandText;
tv.setText(text);
tv.setMovementMethod(LinkMovementMethod.getInstance());
tv.setText(addClickablePartTextViewResizable(Html.fromHtml(tv.getText().toString()), tv, expandText), TextView.BufferType.SPANNABLE);
} else if (tv.getLineCount() >= maxLine) {
int lineEndIndex = tv.getLayout().getLineEnd(maxLine - 1);
String text = tv.getText().subSequence(0,lineEndIndex - expandText.length() + 1)+ " " + expandText;
tv.setText(text);
tv.setMovementMethod(LinkMovementMethod.getInstance());
tv.setText(addClickablePartTextViewResizable(Html.fromHtml(tv.getText().toString()), tv, expandText), TextView.BufferType.SPANNABLE);
}
}
});
}
private SpannableStringBuilder addClickablePartTextViewResizable(final Spanned strSpanned, final TextView tv,final String expandText) {
String str = strSpanned.toString();
SpannableStringBuilder ssb = new SpannableStringBuilder(strSpanned);
if (str.contains(expandText)) {
ssb.setSpan(new Spannable(Color.BLUE, true) {
@Override
public void onClick(View widget) {
tv.setLayoutParams(tv.getLayoutParams());
tv.setText(tv.getTag().toString(),TextView.BufferType.SPANNABLE);
tv.invalidate();
}
}, str.indexOf(expandText), str.indexOf(expandText)+ expandText.length(), 0);
}
return ssb;
}
class Spannable extends ClickableSpan {
private int color = -1;
private float fontSize = -1;
private boolean isUnderline = true;
/**
* Constructor
*/
public Spannable() {
}
/**
* Constructor
*/
public Spannable(int color) {
this.color = color;
}
/**
* Constructor
*/
public Spannable(float fontSize) {
this.fontSize = fontSize;
}
/**
* Constructor
*/
public Spannable(boolean isUnderline) {
this.isUnderline = isUnderline;
}
/**
* Constructor
*/
public Spannable(int color, boolean isUnderline) {
this.isUnderline = isUnderline;
this.color = color;
}
/**
* Constructor
*/
public Spannable(int color, float fontSize) {
this.color = color;
this.fontSize = fontSize;
}
/**
* Overrides methods
*/
@Override
public void updateDrawState(TextPaint ds) {
if (color != -1) {
ds.setColor(color);
}
if (fontSize > 0) {
ds.setTextSize(fontSize);
}
ds.setUnderlineText(isUnderline);
}
@Override
public void onClick(View widget) {
}
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textview=(textview)findViewById(R.id.textview);
textview.setText("DemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoMotExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDetDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDetextDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoemotextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemOtextDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDeDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoMotExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDetDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDetextDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoemotextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDe
mTextView.getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
showHideMoreButton(mTextView);
}
});
public void showHideMoreButton(TextView mTextView) {
Layout layout = mTextView.getLayout();
if (layout != null) {
int lines = layout.getLineCount();
if (lines > 0) {
int ellipsisCount = layout.getEllipsisCount(lines - 1);
if (ellipsisCount > 0) {
mShowMoreButton.setVisibility(View.VISIBLE);
}
}
}
}
public void showHideMoreButton(TextView mTextView) {
int lines = mTextView.getLineCount();
if (lines > 2) {
mShowMoreButton.setVisibility(View.VISIBLE);
mTextView.setSingleLine(false);
mTextView.setEllipsize(TextUtils.TruncateAt.END);
mTextView.setLines(2); //no. of lines you want your textview to display
}
}