- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在两个 TextView 的父 View 上使用 viewTreeObserver.addOnGlobalLayoutListener
, onGlobalLayout
以获得一个的宽度和另一个的高度
private int row_height;
private int column_width;
private RelativeLayout RL;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RL = (RelativeLayout) findViewById(R.id.RL);
final TextView textView = (TextView) findViewById(R.id.textView33);
final TextView textView2 = (TextView) findViewById(R.id.textView25);
ViewTreeObserver viewTreeObserver = RL.getViewTreeObserver();
viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
column_width = textView2.getWidth();
row_height = textView.getHeight();
textView.setText("column_width" + column_width + "\nrow_height" + row_height);
CreateEvent(0, 6, 4);
CreateEvent(0, 8, 6);
CreateEvent(0, 7, 7);
CreateEvent(0, 5, 2);
}
});
//CreateEvent(0,6,4); //not working
}
问题是 CreateEvent
被无限次调用,这会减慢我的应用程序,那么如何解决这个问题?
我想做的是,当布局完全显示时,我保存 textView25
的宽度和 textView33
的高度,以便在 CreateEvent
中使用它们> 并且只有当布局从 portrait
更改为 landscape
最佳答案
我遇到了同样的问题。正如另一位回答者所建议的那样,我试图直接从 ViewTreeObserver 对象中删除 OnGlobalLayoutListener ,但它给出了一个错误。最后,我从 View 中抓取树观察器并从中删除 OnGlobalLayoutListener,如下所示:
private class GLListener implements ViewTreeObserver.OnGlobalLayoutListener
{
@Override
public void onGlobalLayout()
{
adView.getViewTreeObserver().removeOnGlobalLayoutListener(glListener); //or "this"
/*
*CODE HERE RUNS ONCE
*/
}
}
GLListener 是我实例化并作为 OnGlobalLayoutListener 对象添加到 adView 的类,adView(您可能已经猜到了)是一个 AdView。我这样做是为了不使用嵌套类。你可以让它匿名。无论哪种方式,都可以使用“this”而不是像我那样使用对象引用。
关于android - viewTreeObserver.OnGlobalLayoutListener , onGlobalLayout , 无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35770652/
我有一个 Logo View ,它是一个包含单个 ImageView 的全屏 fragment 。 Logo 图像完全可见后,我必须执行一些操作。 以下代码用于调用特殊任务 @Override
在我的代码中,我试图找到 textview 占用的高度.. public void onCreate(Bundle savedInstanceState) { super.onCreate(s
我正在使用 Kotlin,并使用 onGlobalLayout 加载 ImageView 。通过 loadUrl。在不使用 afterMeasured 的情况下,我的图像加载得很好,但有时由于高度为
我已经在使用 ViewTreeObserver 的 Activity 中没有问题,但在这种情况下我没有得到 onGlobalLayout 回调。 由于我在执行 http API 调用后获得了 View
public class QuadPadFragment extends Fragment { int w = 0; int h = 0; public View onCreateView(Lay
我的 Firebase 崩溃报告显示以下代码在极少数设备上出现故障。我无法重现这个问题。谁能建议可能是什么问题?看来问题是 imageView.getWidth() 或 imageView.getHe
我在两个 TextView 的父 View 上使用 viewTreeObserver.addOnGlobalLayoutListener , onGlobalLayout 以获得一个的宽度和另一个的高
我有以下 ListView 项目: 目前,除了 TextView (2) 的宽度外,一切都按预期工作并放置在应有的位置。 因为我使用了带有一些 wrap_contents 的 RelativeLayo
我对从新 Google Maps API 嵌入 SuportMapFragment 的 Fragment 有疑问。创建我的 fragment 时,它从 onResume 方法开始的 AsyncTask
我有一个 Android 对话框,我想将其放置在其窗口中的特定位置。 我正在使用 API 8 为什么int a == -2和int b == 153不是正数? 有什么区别 getLayoutParam
我的 fragment 中有以下代码: public void someMethod() { scrollView.getViewTreeObserver().addOnGlobalLayou
我是一名优秀的程序员,十分优秀!