Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何以编程方式检查字符串是否过宽以适合Android屏幕_Android_Android Listview - Fatal编程技术网

如何以编程方式检查字符串是否过宽以适合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?