Created
October 23, 2017 15:20
-
-
Save filipebezerra/71c84cafa0b1b95d63b7fc3ec75483d3 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.os.Build; | |
import android.support.v4.view.ViewCompat; | |
import android.view.View; | |
import android.view.ViewTreeObserver; | |
/** | |
* @author Filipe Bezerra | |
*/ | |
public class ViewUtils { | |
private ViewUtils() {/* cannot be instantiated */} | |
/** | |
* Executes the given {@link java.lang.Runnable} when the view is laid out | |
**/ | |
public static void onLaidOut(final View view, final Runnable runnable) { | |
if (isLaidOut(view)) { | |
runnable.run(); | |
return; | |
} | |
final ViewTreeObserver observer = view.getViewTreeObserver(); | |
observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { | |
@Override | |
public void onGlobalLayout() { | |
final ViewTreeObserver trueObserver; | |
if (observer.isAlive()) { | |
trueObserver = observer; | |
} else { | |
trueObserver = view.getViewTreeObserver(); | |
} | |
removeOnGlobalLayoutListener(trueObserver, this); | |
runnable.run(); | |
} | |
}); | |
} | |
/** | |
* Returns whether or not the view has been laid out | |
**/ | |
private static boolean isLaidOut(View view) { | |
return ViewCompat.isLaidOut(view) && view.getWidth() > 0 && view.getHeight() > 0; | |
} | |
@SuppressWarnings("deprecation") private static void removeOnGlobalLayoutListener( | |
ViewTreeObserver observer, ViewTreeObserver.OnGlobalLayoutListener listener) { | |
if (Build.VERSION.SDK_INT >= 16) { | |
observer.removeOnGlobalLayoutListener(listener); | |
} else { | |
observer.removeGlobalOnLayoutListener(listener); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment