'Android: method called after creation of activity interface
I would like to perform some task after the creation of the graphic interface of the activity. I need to know the exact height and width of some views and change the layoutParams of some of those views based on the width and height. In the onResume method the views have all the parameters still equal to 0...
As for now I'm using a delayed task that runs after some time from the onCreate but this isn't a good solution at all...
What is the last method called in the activity creation? And are the views' width and height available in such method?
Solution 1:[1]
Call this inside of the onCreate()
final View rootView = getWindow().getDecorView().getRootView();
rootView.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
//by now all views will be displayed with correct values
}
});
Solution 2:[2]
onResume() is last, but perhaps better is onViewCreated(). Its advantage is that it is not invoked every time you regain focus. But try getting properties of your view inside of post() over layout element which you need. For example:
textView.post(new Runnable() {
@Override
public void run() {
// do something with textView
}
});
Solution 3:[3]
The last method that runs when activity starts is onResume().
You can find it at Activity lifecycle.
If that is not good enough for you, run delayed task from this onResume() and you'll be fine.
Solution 4:[4]
In the last line of the onResume() method get all the data you want. It should show you all that you need.
Solution 5:[5]
Use a Coroutine:
In onCreate() ...
CoroutineScope(SupervisorJob()).launch {
getImageAttributes()
}
... then use a while loop to wait until image is in View ...
private fun getImageAttributes() {
while (imageView.height == 0) { /* */ }
val h = imageView.height
val w = imageView.width
val b = imageView.clipBounds
val x = imageView.x
val y = imageView.y
val tx = imageView.translationX
val ty = imageView.translationY
}
You should add a timeout or make the Job cancellable if there is a chance that the imageView.height is going to be 0.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | A. Adam |
| Solution 2 | |
| Solution 3 | Yaniv |
| Solution 4 | Hitman |
| Solution 5 | Kent |
