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

Im пытается установить макет для 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");
        }

}

Ответ 1

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

Попробуйте это

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

Ответ 2

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

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

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

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

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

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

Ответ 3

Вызов

TextView.onPreDraw();

Создает макет.

Ответ 4

Вызвать mytextview.getLayout() в onStart или onResume обратном вызове.

Ответ 5

Во-первых, я не знаю, является ли это опечаткой или преднамеренно, но вы объявили метод "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.