如何获取在xml中定义为fill_parent的高度和宽度的线性布局的宽度和高度?我尝试过测量方法,但我不知道它为什么没有给出确切的价值。在oncreate方法完成之前,我需要在Activity中使用这些值。获取运行时的布局高度和宽度android
回答
想我必须得在XML定义的LinearLayout
宽度。我必须通过XML获取它的参考。定义LinearLayout
l
作为实例。
l = (LinearLayout)findviewbyid(R.id.l1);
ViewTreeObserver observer = l.getViewTreeObserver();
observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// TODO Auto-generated method stub
init();
l.getViewTreeObserver().removeGlobalOnLayoutListener(
this);
}
});
protected void init() {
int a= l.getHeight();
int b = l.getWidth();
Toast.makeText(getActivity,""+a+" "+b,3000).show();
}
callfragment();
}
注意!在onCreate完成之前它不会给你值。 Alhought我已经在onCreate方法中调用它的覆盖方法将被称为迟了。所以看起来你的应用程序运行缓慢,但它解决了我的目的。 – MGDroid
宽度和高度值是在创建布局之后设置的,当元素被放置后,它们被测量。在第一次调用onSizeChanged时,parms将为0,所以如果您使用该检查。
这里更详细一点 https://groups.google.com/forum/?fromgroups=#!topic/android-developers/nNEp6xBnPiw
这里http://developer.android.com/reference/android/view/View.html#Layout
下面是如何使用onLayout:
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
int width = someView.getWidth();
int height = someView.getHeight();
}
你可以在配置变更监听器添加到您的布局,获得最新的高度和宽度,甚至最后改变之前的一个。
在API级别11
添加监听将被调用时,视图变化 的边界由于布局处理。
LinearLayout myLinearLayout = (LinearLayout) findViewById(R.id.my_linear_layout);
myLinearLayout.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
// Preventing extra work because method will be called many times.
if(height == (bottom - top))
return;
height = (bottom - top);
// do something here...
}
});
得到它的工作,你需要检查所需的高度值是否大于0 - 和第一然后取出onGlobalLayout听众,做任何你想要的高度。监听者不断地调用它的方法,并且在第一次调用时不能保证视图被正确测量。
final LinearLayout parent = (LinearLayout) findViewById(R.id.parentView);
parent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int availableHeight = parent.getMeasuredHeight();
if(availableHeight>0) {
parent.getViewTreeObserver().removeGlobalOnLayoutListener(this);
//save height here and do whatever you want with it
}
}
});
这样做 - 谢谢。删除监听器调用已从API级别16弃用。本文描述如何支持早期和后期API的调用http://stackoverflow.com/a/23741481/2162226 – gnB
- 1. 获取宽度和高度的布局
- 2. 如何在运行时获得布局的高度和宽度?
- 3. Android布局高度和宽度
- 4. 如何在android中运行时更改线性布局的宽度和高度?
- 5. 是否可以在运行时更改Android中的布局宽度和高度?
- 6. Android |获取屏幕高度,宽度和屏幕宽度,高度
- 7. 使用布局权重获取textview集的高度和宽度?
- 8. 获取布局的宽度和高度创建表单后
- 9. 以编程方式获取布局的高度和宽度
- 10. Android布局等宽和高度
- 11. Android,获取屏幕宽度和高度?
- 12. 获取高度和宽度
- 13. 布局宽度和高度被忽略
- 14. Usercontrol运行时宽度和高度
- 15. Android:在布局中获取宽度
- 16. 如何在android中获取warp_content或match_parent布局的宽度和高度?
- 17. Android的线性布局的高度和宽度没有设置
- 18. 设置android的相对布局的高度和宽度
- 19. 如何获得我的布局的高度和宽度
- 20. Android的布局控制表高度和宽度包含
- 21. 在android中运行时更改ImageButton的宽度和高度
- 22. 在RecycleView中获取一行的宽度和高度 - Android
- 23. 旋转位图android时获取位图的宽度和高度?
- 24. 画布高度和宽度
- 25. 获取GridPane列/行的宽度/高度?
- 26. Android百分比布局宽度和高度应该指定
- 27. 获取图像的宽度和高度
- 28. 获取文档的宽度和高度
- 29. 获取UIElement的高度和宽度?
- 30. 获取图像的宽度和高度
IIRC在测量之前,您无法获得任何东西的高度/宽度。当onSizeChanged被调用时,它被分配,如果你重载onLayout所有视图应该有一个高度和宽度 – tom502
@ tom502你可以给我一个链接或一段代码?这将是非常有益的。 – MGDroid