获取布局的宽高不能直接用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);
}
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);
}