在Android的`onCreate`方法中直接获取控件的宽度和高度可能会得到0,因为此时控件可能还没有被完全绘制和测量。不过,你可以通过几种方法间接地在`onCreate`之后获取控件的尺寸。
一种常用的方法是使用`ViewTreeObserver`来监听控件的绘制完成事件。以下是一个示例代码,展示了如何在Activity的`onCreate`方法中设置监听器,以便在控件被绘制完成后获取其宽度和高度:
public class MyActivity extends AppCompatActivity {
private View myView; // 假设这是你要获取尺寸的控件
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
myView = findViewById(R.id.my_view); // 替换为你的控件ID
// 使用ViewTreeObserver监听控件的绘制完成事件
ViewTreeObserver vto = myView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// 控件的尺寸已经确定,现在可以安全地获取它们
int width = myView.getWidth();
int height = myView.getHeight();
// 在这里使用width和height做你需要的事情
// 注意:为了避免内存泄漏,最好在适当的时候移除这个监听器
// 移除监听器
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
myView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
} else {
// 对于Android 3.0之前的版本
myView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
}
});
}
}
注意,在Android API 16(Jelly Bean)及以后的版本中,你应该使用`removeOnGlobalLayoutListener`来移除监听器,以避免潜在的内存泄漏。对于更早的API版本,你应该使用`removeGlobalOnLayoutListener`。
此外,请确保你的`my_view`在布局文件中已经被正确定义和引用。