您的位置:首页 > 其它

关于获取布局的宽高

2015-12-15 23:30 525 查看
获取布局的宽高不能直接用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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: