2017-07-11 15 views
0

設定変更後に毎回Textviewから取得しようとするLayoutオブジェクトにnullが返されます。 コードを含むメソッドは、onResume()から呼び出されます。Android TextView.getLayout()がnullを返します

私はそれのためのいくつかの追加のセットアップを行う必要があると思う。

私は同様の質問を研究しましたが、明確な答えはありません。

設定が変更された後、レイアウトの準備ができていることを通知するイベントとは何ですか? ドキュメントがありますか?

EDITED

public class BookDisplayAct extends Activity implements View.OnClickListener { 
... 
private TextView textView; 
@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     textView = (TextView) findViewById(R.id.textViewMain); 
     textView.setPadding(15, 15, 15, 15); 
... 
} 

@Override 
    protected void onResume() { 
... 
    renderBookView(); 
} 

    public void renderBookView() { 
... 
    justifyText(spannable, textView); 
... 

} 

    private Spannable justifyText(Spannable spannable, TextView textView) { 
    Layout layout = textView.getLayout(); 
    int line_count = layout.getLineCount(); 
... 
} 

私は最後の行で発生する、NullPointer例外を取得します。

+0

可能性のある重複した以下のようにあなたのjustifyText方法を変更[textview.getLayoutを使用する方法()?それはnullを返す](https://stackoverflow.com/questions/16558948/how-to-use-textview-getlayout-it-returns-null) –

+0

多分、正確な答え、IMOはありません。私はコードを追加しました。ありがとう。 – Bord81

+0

「これはレイアウト段階の後でのみ動作します。そうでない場合、返されるレイアウトはnullになるので、コードの適切な場所でこれを呼び出してください。それでは、これは「適切な場所」ですか? – Bord81

答えて

1

ただの

private Spannable justifyText(Spannable spannable, TextView textView) { 
    ViewTreeObserver observer= textView.getViewTreeObserver(); 
    observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      Layout layout = textView.getLayout(); 
      int line_count = layout.getLineCount(); 
     } 
    }); 
    ... 
}