Do something when a view's layout is ready - Android User Interface

Android examples for User Interface:Layout

Description

Do something when a view's layout is ready

Demo Code

/*/*  w w w  .j  a  va2s  .co  m*/
 * Copyright 2012 Kevin Sawicki <kevinsawicki@gmail.com>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
//package com.java2s;

import android.os.Build;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;

import android.view.View;
import android.view.ViewTreeObserver;

public class Main {
    /**
     * Do something when a view's layout is ready
     *
     * @param view
     * @param runnable
     */
    public static void runOnLayoutIsReady(@Nullable final View view,
            @NonNull final Runnable runnable) {
        if (view != null) {
            if (view.isShown())
                runnable.run();
            else
                view.getViewTreeObserver().addOnGlobalLayoutListener(
                        new ViewTreeObserver.OnGlobalLayoutListener() {
                            @SuppressWarnings("deprecation")
                            @Override
                            public void onGlobalLayout() {
                                runnable.run();
                                if (view != null)
                                    removeGlobalOnLayoutListener(view, this);
                            }
                        });
        }
    }

    /**
     * Compat version of removeGlobalOnLayoutListener
     *
     * @param view
     * @param listener
     */
    public static void removeGlobalOnLayoutListener(View view,
            ViewTreeObserver.OnGlobalLayoutListener listener) {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN)
            // recommended removeOnGlobalLayoutListener method is available since API 16 only
            view.getViewTreeObserver().removeGlobalOnLayoutListener(
                    listener);
        else
            view.getViewTreeObserver().removeOnGlobalLayoutListener(
                    listener);
    }
}

Related Tutorials