我有一个习惯ListView
。在自定义 ListView 中,我有一个 TextView,它看起来像这样
现在,我的问题是
1)有没有办法检查名称是否太宽以适应Android的屏幕?我的意思是我不想要两条线。就像这里Wachler
在第 2 行。那么,如何检查所有名称是否都宽到可以在一行中显示在屏幕上。
我有一个习惯ListView
。在自定义 ListView 中,我有一个 TextView,它看起来像这样
现在,我的问题是
1)有没有办法检查名称是否太宽以适应Android的屏幕?我的意思是我不想要两条线。就像这里Wachler
在第 2 行。那么,如何检查所有名称是否都宽到可以在一行中显示在屏幕上。
//1)
layout_width = yourLayout.getWidth(); //in order to measure the width of the ListView rows container
要查找文本大小:
//2)
Paint paint = new Paint();
Rect bounds = new Rect();
int text_height = 0;
int text_width = 0;
paint.setTypeface(Typeface.DEFAULT);// your preference here
paint.setTextSize(25);// have this the same as your text size
String text = "Some random text";
paint.getTextBounds(text, 0, text.length(), bounds);
text_height = bounds.height();
text_width = bounds.width();
//3)
if(text_width < layout_width){
//..do your magic
}
TextView
我通过检查完成后有多少行来解决这个问题onSizeChanged
,因为只有这样你才能获得行数的真实值。
首先创建一个接口(您可以根据需要定义它Fragment/Activity
)
public interface OnCustomTextViewSizeChangedListener {
public void SizeChanged(int size);
}
然后创建您的自定义TextView
,Override
onSizeChanged 并创建一个函数来定义您的侦听器。
public class CustomTextView extends TextView {
private OnCustomTextViewSizeChangedListener sizeChangeListener;
...
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
// TODO Auto-generated method stub
super.onSizeChanged(w, h, oldw, oldh);
if(this.sizeChangeListener != null){
this.sizeChangeListener.SizeChanged(getLineCount());
}
}
public void setSizeChangeListener( OnCustomTextViewSizeChangedListener listener){
this.sizeChangeListener = listener;
}
}
然后只需在您Fragment/Activity
的TextView
.
OnCustomTextViewSizeChangedListener textViewSizeChanged = new OnCustomTextViewSizeChangedListener() {
@Override
public void SizeChanged(int size) {
if(size == 2){
//Do your stuff here, like changing text size
}
}
}
PS:不要忘记更改布局以使用您的CustomTextView
希望能帮助到你!
您可以将自定义列表视图布局的TextView
属性android:ellipsize="end"
设置为,也可以android:singleLine="true"
在TextView
.
当 TextView 无法展开以显示其所有文本时,它将使用椭圆大小。如果需要,属性 ellipsized 设置三个点的位置。
由于您使用的是 aTextView
您可以使用它的方法来确定它扩展了getLineCount()
多少行。TextView
但是在使用这个方法的时候要小心,在调用这个方法之前一定要确保视图已经绘制好了。有关更多信息,请参阅文档。
如果您希望您的文本视图显示在一行中,请执行以下操作 -
textView.setMaxLines(1);
但请记住,它会删除不适合 textview 的文本
我想你有一个 TextView 显示文本?
您可以通过计算 TextView 的宽度来检查 textviews 文本是否被修剪,还可以计算将在 textview 中显示的文本的宽度:
@Override
public void onWindowFocusChanged(boolean hasFocus) {
// TODO Auto-generated method stub
super.onWindowFocusChanged(hasFocus);
isMarqueed("I am fine here. How r u", textView.getWidth(), textView);
isMarqueed("I am fine", textView.getWidth(), textView);
}
private boolean isMarqueed(String text, int textWidth, TextView tv) {
Paint testPaint = new Paint();
testPaint.set(tv.getPaint());
boolean isMarquee = true;
if (textWidth > 0) {
int availableWidth = (int) (textWidth - tv.getPaddingLeft() - tv.getPaddingRight()-testPaint.measureText(text));
System.out.println("...available width..."+availableWidth);
isMarquee = false;
}
return isMarquee;
}