如何知道View是否已经在布局上?

时间:2014-03-26 10:55:57

标签: android android-layout android-view

抱歉我的英文

View.isInLayout()方法可能与我想要的相同,但在API version 18中添加了Android,我在我的应用中使用了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上。在那种情况下,我该怎么办?

1 个答案:

答案 0 :(得分:2)

要知道视图是否已添加到布局,请执行

View view = layout.findViewById(int id);

View view = layout.findViewByTag(Object tag);

和......

if(view != null) ... //view is already added

根据您的要求,您可以调用layout.removeView(view)来删除视图并添加新视图,或者更新它或不执行任何操作......或者您想要的任何内容:)