use*_*569 16 android ellipsis textview
我的TextView宽度为wrap content.在这个TextView我设置文本,但文本每次都不是相同的长度.当文本很长时,我使用单行true和ellipsize:end.但现在我有一个问题.我想设置其他布局的可见性,但这取决于我的文本的长度.如果文本太长而无法放入屏幕我想setVisible为true,但是当文本很短并且我不需要ellipsize时,我想将可见性设置为false.所以我需要检查TextView的状态.当它的椭圆形时我想要setVisible真实,当它不是setVisible假的.我怎么能这样做 这就是我得到的:
tvAle.post(new Runnable() {
@Override
public void run() {
int lineCount = tvAle.getLineCount();
Paint paint = new Paint();
paint.setTextSize(tvAle.getTextSize());
final float size = paint.measureText(tvAle.getText().toString());
Log.v("a", ""+size+" "+tvAle.getWidth());
if ((int)size > (tvAle.getWidth()+10)) {
allergiesLayout.setVisibility(View.VISIBLE);
}
else
allergiesLayout.setVisibility(View.GONE);
}
Run Code Online (Sandbox Code Playgroud)
但这个解决方案不起作用.
Cal*_*vin 56
您可以使用以下提供的方法:getEllipsisCount
Layout layout = textview1.getLayout();
if(layout != null) {
int lines = layout.getLineCount();
if(lines > 0) {
int ellipsisCount = layout.getEllipsisCount(lines-1);
if ( ellipsisCount > 0) {
Log.d(TAG, "Text is ellipsized");
}
}
}
Run Code Online (Sandbox Code Playgroud)
可以通过getLineCount()获取行
Sam*_* Rö 12
好吧,接受的解决方案确实有效,但是错过了一些极端情况,因为它只会检查椭圆化字符的最后一行.如果我们有一个由两行组成的TextView并使用TruncateAt.START截断文本的开头,则接受的答案将失败.: - /
添加ViewTreeObserver.OnPreDrawListener对我来说似乎更像是一个非常昂贵的开销.所以我对接受的答案的代码做了以下改进:
/**
* Checks if the text of the supplied {@link TextView} has been ellipsized.
*
* @param textView
* The {@link TextView} to check its text.
*
* @return {@code True} if the text of the supplied {@code textView} has been ellipsized.
*/
public static boolean isTextViewEllipsized(final TextView textView) {
// Check if the supplied TextView is not null
if (textView == null) {
return false;
}
// Check if ellipsizing the text is enabled
final TextUtils.TruncateAt truncateAt = textView.getEllipsize();
if (truncateAt == null || TextUtils.TruncateAt.MARQUEE.equals(truncateAt)) {
return false;
}
// Retrieve the layout in which the text is rendered
final Layout layout = textView.getLayout();
if (layout == null) {
return false;
}
// Iterate all lines to search for ellipsized text
for (int line = 0; line < layout.getLineCount(); ++line) {
// Check if characters have been ellipsized away within this line of text
if (layout.getEllipsisCount(line) > 0) {
return true;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
但是,仍有改进的余地.但是这种方法足以满足我的用例.我们赞赏更正和改进.:-)
| 归档时间: |
|
| 查看次数: |
14340 次 |
| 最近记录: |