getHeight (), getWidth () в textView возвращают 0 - PullRequest
1 голос
/ 17 января 2012

Я хочу getHight и getWidth текста в textView. Я ссылался на многие темы, но еще не выяснил свою проблему. В какой-то теме видят некоторые решения как:

    @Override
public void onWindowFocusChanged(boolean hasFocus) {
   // TODO Auto-generated method stub
   super.onWindowFocusChanged(hasFocus);
   Log.d("line", ""+selectA.getLineCount());
   Log.d("hight", "" +selectA.getHeight());
}

ИЛИ

   TextView upV = (TextView)findViewById(R.id.up);
   ViewTreeObserver vto = upV.getViewTreeObserver();
    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {

            Log.d("W ", ""+upV.getWidth());
            Log.d("H ", ""+upV.getHeight());
        }
    });

Эти решения получают нужное мне значение, но не каждый раз, когда приложение запускается, иногда оно return 0. Пожалуйста, помогите мне

Ответы [ 5 ]

1 голос
/ 17 января 2012

Вы звоните getWidth() и getHeight() слишком рано. Пользовательский интерфейс еще не был измерен и выложен на экране, и в результате методы правильно возвращают 0.

0 голосов
/ 20 февраля 2019

Используйте приведенный ниже код для получения высоты и ширины TextView

textView.measure(0,0)
int w = textView.getMeasuredWidth();
int h = textView.getMeasuredHeight();
0 голосов
/ 20 февраля 2019

Вы получаете это, потому что когда вы запрашиваете, представление высоты не рисуется.

Solution-

textView.post(new Runnable() {
        @Override
        public void run() {
             //height is ready
         int height = textView.getHeight();
        }
    });
0 голосов
/ 03 января 2013

Я нашел простое ... очень простое решение.

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;

public class SimpleActivity extends Activity {

private TextView textView;
private int displayWidth, displayHeight;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    textView = (TextView) findViewById(R.id.hello_tv);      
    textView.setOnClickListener(                
            new OnClickListener()
            {
                @Override
                public void onClick(View v) {
                    displayWidth = textView.getWidth();
                    displayHeight = textView.getHeight();
                    textView.setText(displayWidth + "\n" + displayHeight);                      
                }
            }
            );              
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}
0 голосов
/ 21 июня 2012

Чтобы получить высоту или ширину вида, вы можете переопределить onDraw (холст холста) этого вида:

@Override
protected void onDraw(Canvas canvas)
{
    super.onDraw(canvas);

    int w = getWidth();
    int h = getHeight();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...