代码之家  ›  专栏  ›  技术社区  ›  Leonid Semyonov

如何知道视图是否已在布局中?

  •  0
  • Leonid Semyonov  · 技术社区  · 10 年前

    对不起我的英语

    可能是 View.isInLayout() 方法与我想要的相同,但它在Android中添加了 API version 18 ,我使用 MIN VERSION == 9 在我的应用程序中。

    我能做什么?

    此刻,我使用下一个代码来捕捉时刻,当 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);
        }
    }
    

    但在我的代码中 看法 可能已放置在 layout 。那样的话,我能做什么?

    1 回复  |  直到 10 年前
        1
  •  2
  •   ElDuderino    10 年前

    要知道是否将视图添加到布局中,请执行以下操作

    View view = layout.findViewById(int id);

    View view = layout.findViewByTag(Object tag);

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

    根据您的要求,您可以调用layout.removeView(视图)来删除视图并添加新视图,或者更新视图或不做任何操作。。。或任何你想要的:)