2017-06-21 3 views
0

編集:「なぜsetOnClickListener内で動作するのですか」という質問がありますが、直後に見つかりました。 https://stackoverflow.com/a/21926714/6474462Linearlayout getHeight()は0を返しますが、setOnClickListenerの内部ではtrueを返します。

旧: はObjectAnimatorで遊んとのLinearLayoutのgetHeight()の戻り0に気づいたが、(クリック後)setOnClickListener内部で実際にこの作業を行う方法を、真の値を返すんでしたか?

public class MainActivity extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     final LinearLayout linearLayout = (LinearLayout) findViewById(R.id.main_linear); 

     TextView textView1 = (TextView) findViewById(R.id.textview1); 
     final TextView textView2 = (TextView) findViewById(R.id.textview2); 

     int viewHeight1 = linearLayout.getHeight(); 
     textView1.setText("viewHeight1: " + viewHeight1); 

     textView2.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       int viewHeight2 = linearLayout.getHeight(); 
       textView2.setText("viewHeight2: " + viewHeight2); 
       } 
      }); 
     } 
    } 

答えて

2

あなたは、画面上に描画オブジェクトの後のgetHeight()を呼び出す必要が

final TextView textView1 = (TextView)findViewById(R.id.textview1); 
final ViewTreeObserver object= textView1 .getViewTreeObserver(); 
    object.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      textView1 .getHeight() 
      object.removeGlobalOnLayoutListener(this); 
     } 
    }); 
関連する問題