Извините за мой английскийКак узнать, есть ли вид уже в макете?
Может быть метод View.isInLayout()
делает то же самое, что я хочу, но он добавил в Android в API version 18
, и я использую MIN VERSION == 9
в моем приложении.
Что я могу сделать?
На данный момент я использую следующий код, чтобы поймать момент, когда view
будет размещен на макете, то есть, чтобы поймать момент, когда view
будет иметь фактические размеры:
public static void runOnViewPlacedOnLayout(final Runnable runnable) {
ViewTreeObserver viewTreeObserver = view.getViewTreeObserver();
viewTreeObserver.addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
removeOnGlobalLayoutListener(view, this);
runnable.run();
}
}
);
}
@SuppressWarnings("deprecation")
private static void removeOnGlobalLayoutListener(View view, ViewTreeObserver.OnGlobalLayoutListener listener) {
ViewTreeObserver viewTreeObserver = view.getViewTreeObserver();
if (viewTreeObserver == null) {
return;
}
if (Build.VERSION.SDK_INT < 16) {
viewTreeObserver.removeGlobalOnLayoutListener(listener);
} else {
viewTreeObserver.removeOnGlobalLayoutListener(listener);
}
}
Но в моем кодогенераторе view
могут быть уже найдены на layout
. В таком случае, что я могу сделать?
или иначе, если 'view.getParent() 'возвращает непустой экземпляр, тогда' View' уже находится в макете ... –
@GopalRao +1. Ваше решение эффективно, поскольку findViewById (id) выполняет поиск в иерархии представлений. – Pawan