2013-05-15 4 views
13

textviewのレイアウトを設定しようとしていますので、getEllipsisCount()メソッドを使用できます。しかし、以下のコードはレイアウト値としてnullを返します。 レイアウトを取ってからgetEllipsisCount(0)メソッドを使用するにはどうすればいいですか? onStartまたはonResumeコールバックでtextview.getLayout()を使用するには? nullを返します

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"); 
     } 

} 
+0

'onCreate'メソッドが完了する前にこのメソッドを呼び出すことはできません。 –

答えて

24

それがこの

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

ありがとう私は仕事をしました –

+2

getLayoutはonGlobalLayoutの中でもnullを返すことができることに注目する価値があります。残念ながら、これをコード内でどのように処理するかを理解する必要があります。 –

+6

グローバルレイアウトの後でもgetLayout()がnullになる可能性があることを知りました。addOnPreDrawListener()を代わりに使用し、getLayout()がtrueを返し始めてからremoveOnPreDrawListener()を呼び出すまでtrueを返します。このプレ・ドロー・リスナーからfalseを返すと、再試行が発生します。 – dimsuz

0

コールmytextview.getLayout()

0

まず、タイプミスか意図的なのか分かりませんが、定義済みの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に属していると仮定すると:しかし、私はあなたが以下の提案レイアウトの参照を取得します。 documentationから

2

公共最終レイアウトgetLayout()

追加APIレベル1で現在のテキストを表示するために を使用されているレイアウトを返します。テキストまたは幅に が最近変更された場合はnullになります。

おそらくテキストが変更されているか、あまりに早く呼び出している可能性があります。それ以外の場合は返さレイアウト

のみ機能、レイアウト・フェーズの後に記載されている。このanswer

ルックは、nullになるので、あなたのコード内の適切な場所でこれを呼び出します。

+1

gipi、引用符ではなく引用符で囲み、コードタグではなく;)あなたのために修正しました。 – RvdK

+0

ありがとう@RvdK: – gipi

1

コール

TextView.onPreDraw(); 

これは、レイアウトを作成してみnull

を返して、なぜあなたはあまりにも早くそれを呼び出している、thatsの。

+1

は、質問または質問に関する詳細またはサンプル・コードを提供します。 –

関連する問題