Как использовать textview.getLayout ()? Он возвращает null

Я пытаюсь установить макет для textview поэтому я могу использовать getEllipsisCount() . Но ниже код возвращает null как значение макета. Как я могу взять макет, а затем использовать getEllipsisCount(0) .

  public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView mytextview =(TextView) findViewById(R.id.textView1); mytextview.setText(myText); Layout layout = mytextview.getLayout(); if(layout != null){ mytextview.settext("very good layout worked\n"); } } 

Solutions Collecting From Web of "Как использовать textview.getLayout ()? Он возвращает null"

Вы называете это слишком рано, поэтому он возвращает null

Попробуй это

  ViewTreeObserver vto = mytextview.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { Layout layout = mytextview.getLayout(); } }); 

Из документации :

Публичный окончательный макет getLayout ()

Добавлено в API level 1 Возвращает макет, который в настоящее время используется для отображения текста. Это может быть null, если текст или ширина в последнее время изменились.

Так что, вероятно, ваш текст имеет изменения или вы называете это слишком рано.

Посмотрите на этот ответ, где указано

Это работает только после этапа компоновки, иначе возвращаемый макет будет нулевым, поэтому позвоните в соответствующее место в вашем коде.

Во-первых, я не знаю, является ли это опечаткой или намеренно, но вы объявили метод settext вместо предопределенного setText . Однако, чтобы получить ссылку на ваш макет, я предлагаю вам следующее:

 LayoutInflater inflater = getLayoutInflater(); RelativeLayout textViewLayout = (RelativeLayout) inflater.inflate(R.layout.activity_main,null); if(textViewLayout!=null) { mytextview.setText("very good layout worked\n"); } 

Предположим, что ваш TextView принадлежит RelativeLayout .

Вызовите mytextview.getLayout() в onStart onResume onStart или onResume .

Вызов

 TextView.onPreDraw(); 

Он создает макет.