I have a View (containing an ad) that I need to scale to fit the screen width at a certain point in time (after the ad is loaded). So I have a method setHeight(myView)
that calculates the correct height for the given screen width and changes the LayoutParams of the View accordingly. The crucial part of the code is this:
LayoutParams params = myView.getLayoutParams();
int width = myView.getWidth();
if (params != null && width > 0) {
params.height = (int) Math.round(ratio * width);
}
This seems to work for the most part, but sometimes the view is not scaled. It seems to only consistenly work if I add the following line at the bottom:
myView.setLayoutParams(params);
This seems to make sense, too, since Android Views call requestLayout()
in their setLayoutParams()
method. Conversely, I see no way how a change in a public field (params.height
) would trigger a layout change.
On the other hand, I repeatedly find tutorials on the net where the params are simply changed and then not set to the view again.
So, my question is: Is it correct that, to immediately update the layout after changing a property of the LayoutParams, I need to call setLayoutParams
again? And that simply changing the property will only lead to a layout change at some later point in time when the layout change is triggered from elsewhere?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…