android 代码获取布局和组件的宽高

获取布局的宽高不能直接用getWidth()或者getHeight直接获取,例如:


 
  1. public void onCreate(Bundle savedInstanceState) {  
  2.         super.onCreate(savedInstanceState);  
  3.         LinearLayout ll_viewArea = (LinearLayout) findViewById(R.id.ll_viewArea);  
  4.         Log.i("LinearLayoutW", ll_viewArea.getWidth()+"");  
  5.         Log.i("LinearLayoutH", ll_viewArea.getHeight()+"");  
  6. }  


这样的打印结果都是0。因为在onCreate方法的时候LinearLayout还并没有绘制完成,所以获取的高度均为0,那么你也许会说,把这段代码放到onResume()方法内就可以了。但是结果一样无法获取。那么怎么办呢。我们可以通过定时器不断的监听LinearLayout的宽高,一旦绘制完成便获取,并关闭定时器。代码如下:

 


 
    1. public void onCreate(Bundle savedInstanceState) {  
    2.     super.onCreate(savedInstanceState);         
    3.     setContentView(R.layout.main);  
    4.     ll_viewArea = (LinearLayout) findViewById(R.id.ll_viewArea);  
    5.      
    6.     final Handler myHandler = new Handler(){  
    7.         @Override  
    8.         public void handleMessage(Message msg) {  
    9.            if(msg.what == 1) {  
    10.                if(ll_viewArea.getWidth()!=0) {  
    11.     Log.i("LinearLayoutW", ll_viewArea.getWidth()+"");  
    12.     Log.i("LinearLayoutH", ll_viewArea.getHeight()+"");  
    13.                    //取消定时器  
    14.                     timer.cancel();                   }  
    15.            }   
    16.         }  
    17.     };  
    18.     timer = new Timer();  
    19.     TimerTask task = new TimerTask(){  
    20.         public void run() {   
    21.             Message message = new Message();  
    22.             message.what = 1;  
    23.             myHandler.sendMessage(message);   
    24.             }   
    25.         };   
    26.        //延迟每次延迟10 毫秒 隔1秒执行一次  
    27.        timer.schedule(task,10,1000)           
posted @ 2015-07-19 20:01  何人之名  阅读(293)  评论(0)    收藏  举报