抱歉我的英文
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
上。在那种情况下,我该怎么办?
答案 0 :(得分:2)
要知道视图是否已添加到布局,请执行
View view = layout.findViewById(int id);
或
View view = layout.findViewByTag(Object tag);
和......
if(view != null) ... //view is already added
根据您的要求,您可以调用layout.removeView(view)来删除视图并添加新视图,或者更新它或不执行任何操作......或者您想要的任何内容:)