1

我有一个习惯ListView。在自定义 ListView 中,我有一个 TextView,它看起来像这样

在此处输入图像描述

现在,我的问题是

1)有没有办法检查名称是否太宽以适应Android的屏幕?我的意思是我不想要两条线。就像这里Wachler在第 2 行。那么,如何检查所有名称是否都宽到可以在一行中显示在屏幕上。

4

6 回答 6

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
}

资源

于 2013-08-12T06:36:32.257 回答
1

TextView我通过检查完成后有多少行来解​​决这个问题onSizeChanged,因为只有这样你才能获得行数的真实值。

首先创建一个接口(您可以根据需要定义它Fragment/Activity

public interface OnCustomTextViewSizeChangedListener {
    public void SizeChanged(int size);
} 

然后创建您的自定义TextViewOverrideonSizeChanged 并创建一个函数来定义您的侦听器。

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/ActivityTextView.

OnCustomTextViewSizeChangedListener textViewSizeChanged = new  OnCustomTextViewSizeChangedListener() {

    @Override
    public void SizeChanged(int size) {
        if(size == 2){
           //Do your stuff here, like changing text size
        }
    }
}

PS:不要忘记更改布局以使用您的CustomTextView

希望能帮助到你!

于 2014-09-12T15:31:12.383 回答
1

您可以将自定义列表视图布局的TextView属性android:ellipsize="end"设置为,也可以android:singleLine="true"TextView.

当 TextView 无法展开以显示其所有文本时,它将使用椭圆大小。如果需要,属性 ellipsized 设置三个点的位置。

于 2013-08-12T06:37:09.553 回答
0

由于您使用的是 aTextView您可以使用它的方法来确定它扩展了getLineCount()多少行。TextView但是在使用这个方法的时候要小心,在调用这个方法之前一定要确保视图已经绘制好了。有关更多信息,请参阅文档

于 2013-08-12T08:05:45.470 回答
0

如果您希望您的文本视图显示在一行中,请执行以下操作 -

textView.setMaxLines(1);

但请记住,它会删除不适合 textview 的文本

于 2013-08-12T06:36:08.577 回答
0

我想你有一个 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;
}

取自这里:如何检查 TextView 字符串是否已被修剪(选取框)?

于 2013-08-12T06:42:05.620 回答