在Android中如何获取设置为Wrap_Content的Textview的宽度

时间:2013-04-15 18:00:30

标签: android textview width

我正在尝试向textview添加一个文本,我已将其宽度设置为Wrap_content。我试图获得此textview的宽度。但它在所有情况下都显示为0。在将文本设置到文本视图后,如何获得textview的宽度。

代码如下:

        LinearLayout ll= new LinearLayout(this);
        ll.setOrientation(LinearLayout.VERTICAL);
        TextView tv = new TextView(this);
        tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
        ll.addView(tv);
        tv.setText("Hello 1234567890-0987654321qwertyuio787888888888888888888888888888888888888888888888888");
        System.out.println("The width is == "+tv.getWidth());// result is 0
        this.setContentView(ll);

请建议。 提前谢谢。

8 个答案:

答案 0 :(得分:8)

动态宽度/高度的视图仅在布局过程完成后才能获得正确的大小(http://developer.android.com/reference/android/view/View.html#Layout)。
您可以将OnLayoutChangeListener添加到TextView并在那里获得它的大小:

tv.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
           public void onLayoutChange(View v, int left, int top, int right, int bottom, 
                                      int oldLeft, int oldTop, int oldRight, int oldBottom) {
                        final int width = right - left;
                        System.out.println("The width is == " + width);                
    });

答案 1 :(得分:3)

在完全构建布局之前,无法获得具有动态大小的视图的宽度。这意味着你无法在onCreate()中获得它。一种方法是创建一个继承自TextView并覆盖onSizeChanged()的类。

答案 2 :(得分:1)

你什么时候打电话给这个?它已被吸引到屏幕上吗?

听起来你过早地打电话给getWidth()

您也可以look at this question

答案 3 :(得分:0)

这对我有用:

RelativeLayout.LayoutParams mTextViewLayoutParams = (RelativeLayout.LayoutParams) mTextView.getLayoutParams();
mTextView.setText(R.string.text);
mTextView.measure(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
int width = mShareTip.getMeasuredWidth();
//use the width to do what you want
mShareTip.setLayoutParams(mShareTipLayoutParams);

答案 4 :(得分:0)

你可以试试这个:

textView.measure(0,0);
int width = textView.getMeasuredWidth();

答案 5 :(得分:0)

你好使用这个方法:

textview.post(new Runnable() {
    @Override
    public void run() {
        int width = textview.getWidth();
        int height = textview.getHeight();
        textview.setText( String.valueOf( width +","+ height ));
    }

});

来源:https://gist.github.com/omorandi/59e8b06a6e81d4b8364f

答案 6 :(得分:0)

在完全绘制视图后,您可以使用此库将宽度执行计算的任务计划到正确的时间

https://github.com/Mohamed-Fadel/MainThreadScheduler

使用样本:

print "us-east1-b"[:-2]

答案 7 :(得分:-1)

你应该用这个:

textView.getMeasuredWidth();