天天看點

android界面繪制完成的标志,涉及到重寫方法Activity的onWindowFocusChange

有的時候,我們需要動态布局,動态擷取UI控件的大小等布局資訊。一開始的思路可能是在onstart方法或者onresume方法裡面擷取布局資訊,因為這兩個方法的執行,意味着視圖是可見的。事實上,在這兩個方法擷取的資訊都是0或負數,那就意味着,主線程還沒有把界面繪制完畢。學安卓的都知道,代碼執行得相當快。我們看到的界面是繪制完成的,但是我們執行的那一段代碼遠比我們看到界面的時候要早很多。這個時候我們需要有個回調函數去知道界面繪制完畢了,我們才執行擷取布局資訊的代碼。Activity的onWindowFocusChanged這個方法是界面繪制完成的标志,系統調用回調這個方法的時候,有一個hasFocus的值,為true的話就代表界面已經擷取到焦點了,那就意味着界面繪制完畢,這個時候擷取布局資訊,就可以了。

Activity的代碼片段

ImageView imgview;

  @Override
  protected void onCreate(Bundle savedInstanceState){    
     imageView=(ImageView)findViewById(R.id.tie3);   
  } 

  @Override    
  public void onWindowFocusChanged(boolean hasFocus){
     // TODO Auto-generated method stub
     super.onWindowFocusChanged(hasFocus);
     if (hasFocus){
        //擷取寬度image.getWidth();                
        //擷取高度image.getHeight();
      }
  }
           

第一次發部落格,來個簡單的,但需要注重的細節問題。

以上是個人實戰遇到的問題和個人見解,有不對的地方,請大神們糾正和補充。