android 代码获取布局和组件的宽高
获取布局的宽高不能直接用getWidth()或者getHeight直接获取,例如:
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- LinearLayout ll_viewArea = (LinearLayout) findViewById(R.id.ll_viewArea);
- Log.i("LinearLayoutW", ll_viewArea.getWidth()+"");
- Log.i("LinearLayoutH", ll_viewArea.getHeight()+"");
- }
这样的打印结果都是0。因为在onCreate方法的时候LinearLayout还并没有绘制完成,所以获取的高度均为0,那么你也许会说,把这段代码放到onResume()方法内就可以了。但是结果一样无法获取。那么怎么办呢。我们可以通过定时器不断的监听LinearLayout的宽高,一旦绘制完成便获取,并关闭定时器。代码如下:
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- ll_viewArea = (LinearLayout) findViewById(R.id.ll_viewArea);
- final Handler myHandler = new Handler(){
- @Override
- public void handleMessage(Message msg) {
- if(msg.what == 1) {
- if(ll_viewArea.getWidth()!=0) {
- Log.i("LinearLayoutW", ll_viewArea.getWidth()+"");
- Log.i("LinearLayoutH", ll_viewArea.getHeight()+"");
- //取消定时器
- timer.cancel(); }
- }
- }
- };
- timer = new Timer();
- TimerTask task = new TimerTask(){
- public void run() {
- Message message = new Message();
- message.what = 1;
- myHandler.sendMessage(message);
- }
- };
- //延迟每次延迟10 毫秒 隔1秒执行一次
- timer.schedule(task,10,1000)

浙公网安备 33010602011771号