2014-10-06 41 views
0

返回0,我有这样的代码:的getWidth()中的onCreate

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_my); 
    content = (RelativeLayout) findViewById(R.id.content); 
    ball = (Ball) findViewById(R.id.ball); 
    txt = (TextView) findViewById(R.id.textView); 
    txt.setVisibility(View.GONE); 
    Log.d("sizes", String.valueOf(content.getWidth())); 
    ball.setOnTouchListener(this); 

} 

的问题是,在日志中它说: “0”。有人可以向我解释一个活动的生命周期是什么,你如何衡量一个视图或者例如如何在开始时直接在一个活动中创建一个弹跳球。谢谢!

回答

2

您必须等待获取宽度之前绘制布局。当绘制时,它被测量并且宽度被保存,因此您可以拨打getWidth。您可以添加一个布局侦听器来等待视图被绘制:

final RelativeLayout content = (RelativeLayout) findViewById(R.id.content); 
content.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { 
    @Override 
    public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { 
     content.removeOnLayoutChangeListener(this); 
     Log.d("sizes", String.valueOf(content.getWidth())); 
    } 
}); 
+0

这是您通常如何操作的方式?如果这是最好的做法比谢谢你! – 2014-10-06 17:16:09

+0

@КристиянКацаров这是我总是这样做,它总是被证明是可行的。 – Simas 2014-10-06 17:27:19