如何以编程方式检查字符串是否过宽以适合Android屏幕
我有一个自定义的如何以编程方式检查字符串是否过宽以适合Android屏幕,android,android-listview,Android,Android Listview,我有一个自定义的列表视图。在自定义列表视图中,我有一个文本视图&它看起来像这样 现在,我的问题是 1) 有没有办法检查名字是否太宽而无法在Android屏幕上显示?我的意思是我不想要两行。就像这里,Wachler在第二行。那么,如何检查所有名称是否都是宽的,以便在一行中显示在屏幕上。如果希望文本视图显示在一行中,请执行以下操作- textView.setMaxLines(1); 但请记住,它会剪切不适合textview的文本如果您希望文本视图显示在一行中,请执行以下操作- textView.
列表视图
。在自定义列表视图中,我有一个文本视图&它看起来像这样
现在,我的问题是
1) 有没有办法检查名字是否太宽而无法在Android屏幕上显示?我的意思是我不想要两行。就像这里,
Wachler
在第二行。那么,如何检查所有名称是否都是宽的,以便在一行中显示在屏幕上。如果希望文本视图显示在一行中,请执行以下操作-
textView.setMaxLines(1);
但请记住,它会剪切不适合textview的文本如果您希望文本视图显示在一行中,请执行以下操作-
textView.setMaxLines(1);
//1)
layout_width = yourLayout.getWidth(); //in order to measure the width of the ListView rows container
但请记住,它会删除不适合textview的文本
//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
}
/2)
油漆=新油漆();
Rect bounds=new Rect();
int text_height=0;
int text_width=0;
paint.setTypeface(Typeface.DEFAULT);//你喜欢这里吗
油漆。设置尺寸(25);//这与您的文本大小相同
String text=“一些随机文本”;
paint.getTextBounds(text,0,text.length(),bounds);
text_height=bounds.height();
text_width=bounds.width();
//3)
if(文本宽度<布局宽度){
//…施展你的魔法
}
要查找文本大小,请执行以下操作:
//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
}
/2)
油漆=新油漆();
Rect bounds=new Rect();
int text_height=0;
int text_width=0;
paint.setTypeface(Typeface.DEFAULT);//你喜欢这里吗
油漆。设置尺寸(25);//这与您的文本大小相同
String text=“一些随机文本”;
paint.getTextBounds(text,0,text.length(),bounds);
text_height=bounds.height();
text_width=bounds.width();
//3)
if(文本宽度<布局宽度){
//…施展你的魔法
}
您可以将自定义listview布局的
TextView
属性设置为android:ellipsize=“end”
,还可以在TextView
中设置android:singleLine=“true”
当TextView无法展开以显示其所有文本时,它将使用省略号。如果需要,属性ellipsized设置三个点的位置。您可以将自定义listview布局的
TextView
属性设置为android:ellipsize=“end”
,还可以在TextView
中设置android:singleLine=“true”
当TextView无法展开以显示其所有文本时,它将使用省略号。如果有必要,属性ellipsized将设置三个点的位置。我想您有一个显示文本的文本视图 您可以通过计算TextView的宽度来检查TextView文本是否被修剪,还可以计算将在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;
}
从这里开始:我想您有一个显示文本的文本视图 您可以通过计算TextView的宽度来检查TextView文本是否被修剪,还可以计算将在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;
}
从这里开始:因为您使用的是
TextView
,所以可以使用它的方法getLineCount()
来确定此TextView
扩展了多少行。但是使用此方法时要小心,必须确保在调用此方法之前已绘制视图。有关更多信息,请参阅。由于您使用的是TextView
,因此可以使用它的方法getLineCount()
确定此TextView
扩展了多少行。但是使用此方法时要小心,必须确保在调用此方法之前已绘制视图。有关更多信息,请参见。我通过检查TextView
在onSizeChanged
完成后有多少行解决了此问题,因为只有这样,您才能获得行数的实际值
首先创建一个接口(您可以在所需的片段/活动
上定义它)
然后在SizeChanged上创建自定义的TextView
,Override
,并创建一个函数来定义侦听器
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;
}
}
然后在你的片段/活动
上创建你的监听器,为你想要的文本视图
和你的好去处定义它
OnCustomTextViewSizeChangedListener textViewSizeChanged = new OnCustomTextViewSizeChangedListener() {
@Override
public void SizeChanged(int size) {
if(size == 2){
//Do your stuff here, like changing text size
}
}
}
注意:不要忘记更改布局以使用CustomTextView
希望有帮助 我通过检查
TextView
在onSizeChanged
完成后有多少行解决了这个问题,因为只有这样你才能得到行数的实际值
首先创建一个接口(您可以在所需的片段/活动
上定义它)
然后在SizeChanged上创建自定义的TextView
,Override
,并创建一个函数来定义侦听器
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;
}
}
然后在你的片段/活动
上创建你的监听器,为你想要的文本视图
和你的好去处定义它
OnCustomTextViewSizeChangedListener textViewSizeChanged = new OnCustomTextViewSizeChangedListener() {
@Override
public void SizeChanged(int size) {
if(size == 2){
//Do your stuff here, like changing text size
}
}
}
注意:不要忘记更改布局以使用CustomTextView
希望有帮助 如果文本不适合宽度,那么您想做什么?
我的意思是我不想要两行,那么如果内容超过一行,您想做什么?请尝试使用singleLine=“true”对于您的文本视图,请在xml文件的文本结尾处应用marque。@CapDroid我想使用FirstName etal@YasirAdnan你的意思是想只显示A.Lambacher C.Leibig而不是A.Lambacher C.Leibig Gunther Zeck&T.Wachtler?如果文本不适合宽度,那么你想做什么?我的意思是我不想要两行
,那么,如果内容超过一行,您要做什么?请尝试在文本视图中使用singleLine=“true”,并在xml文件中文本i的结尾应用marque。@CapDroid我要使用FirstName etal@YasirAdnan你的意思是想只显示A.Lambacher C.Leibig而不是A.Lambacher C.Leibig Gunther Zeck&T.Wachtler?