跳到主要内容

简述在Activity启动的时候获得View宽高的方式 ?

参考答案:

在 Android 中,当 Activity 启动时,直接获取 View 的宽高可能并不准确,因为 View 的布局和绘制通常需要一段时间。以下是一些常用的方法来在 Activity 启动时正确获取 View 的宽高:

  1. 使用 ViewTreeObserver: ViewTreeObserver 提供了观察视图层次结构变化的方法。你可以通过 getViewTreeObserver().addOnGlobalLayoutListener() 添加一个监听器,当视图树的全局事件(如布局、绘制等)完成时,这个监听器会被触发。
View yourView = findViewById(R.id.your_view);
ViewTreeObserver vto = yourView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        yourView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
        int width = yourView.getWidth();
        int height = yourView.getHeight();
        // 使用宽高进行其他操作
    }
});

注意:在获取宽高后,应该移除监听器,避免内存泄漏。 2. onWindowFocusChanged 方法中获取: 当 Activity 的窗口获得或失去焦点时,onWindowFocusChanged 方法会被调用。当窗口获得焦点时,通常意味着视图已经完成了布局和绘制。

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus) {
        View yourView = findViewById(R.id.your_view);
        int width = yourView.getWidth();
        int height = yourView.getHeight();
        // 使用宽高进行其他操作
    }
}
  1. 使用 post 方法: 你可以使用 Viewpost 方法来延迟执行一个 Runnable,直到视图被绘制到屏幕上。
View yourView = findViewById(R.id.your_view);
yourView.post(new Runnable() {
    @Override
    public void run() {
        int width = yourView.getWidth();
        int height = yourView.getHeight();
        // 使用宽高进行其他操作
    }
});

这些方法都可以在 Activity 启动时确保获取到正确的 View 宽高。具体使用哪种方法取决于你的具体需求和场景。