我想做以下事情:
rootLayout.getLayoutParams().height = 100;
目前我在我的“loadData'方法。问题是 - ' layoutParams'似乎是空的,直到“loadData'已被调用(但显然在显示之前)。
是否有某处我可以将此行放置在layoutParams实例化的位置,但仍然是在第一次显示视图之前?
答案 0 :(得分:1)
rootLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
rootLayout.getViewTreeObserver()
.removeOnGlobalLayoutListener(this);
} else {
rootLayout.getViewTreeObserver()
.removeGlobalOnLayoutListener(this);
}
rootLayout.getLayoutParams().height = 100;
rootLayout.requestLayout();
}
});
答案 1 :(得分:0)
您应该考虑将此视图的layoutParams设置为
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, 100));
rootLayout.setLayoutParams(lp);
所以你可以将layoutParams高度设置为100并假设你的父视图为linear layout
,如果不是,那么你应该使用它的layoutparams
答案 2 :(得分:0)
在文档上,您可以查看视图中的所有回调,您可以覆盖https://developer.android.com/reference/android/view/View.html
如果你的视图位于那里指定了LayoutParams的XML布局中,你可以/应该把你的代码放在onFinishInflate
@Override
public void onFinishInflate() {
}
如果您以编程方式执行所有操作,则可以覆盖布局传递
@Override
public void onLayout (boolean changed, int left, int top, int right, int bottom){
// be carefull that this get's called several times
}
或者(在我看来,这是一种更好的方法),你可以欺骗视图的onMeasure
以获得你想要的大小。例如,要使用maxWidth
的视图
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// apply max width
int measuredWidth = MeasureSpec.getSize(widthMeasureSpec);
if (maxWidth > 0 && maxWidth < measuredWidth) {
int measureMode = MeasureSpec.getMode(widthMeasureSpec);
widthMeasureSpec = MeasureSpec.makeMeasureSpec(maxWidth, measureMode);
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}