关于获取布局的宽高
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);
}
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);
}
相关文章推荐
- nginx 502错误
- 新手引导页-ViewPager
- 排序算法小结
- 2-Fifteenth Scrum Meeting-20151215
- 301. Remove Invalid Parentheses
- VirtualBox的四种网络连接方式
- 硬盘内部硬件结构和工作原理详解
- Android中利用数据库查询电话归属地
- ExtJs——Ext基础架构--define定义一个类
- linux C++多线程编程介绍
- android开发之给LinearLayou设置网络图片作为背景
- 南工程操作系统原理期末复习
- html+css复习小结
- 密码
- 如何在Linux上部署gerrit 服务?
- 关于LinearLayout属性android:layout_marginRight的错误
- struts2学习笔记(三)
- MySQL安装--ubuntu
- leetcode -- Triangle -- dp题目重点
- 51nod贪心例子活动安排问题二