有的時候,我們需要動态布局,動态擷取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();
}
}
第一次發部落格,來個簡單的,但需要注重的細節問題。
以上是個人實戰遇到的問題和個人見解,有不對的地方,請大神們糾正和補充。