- 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/
我以编程方式创建了几个布局,我需要获取其中一个的宽度,重新计算该值并进行更改。我在 onGlobalLayoutListener 中执行的所有这些操作。但是当我设置一个新的宽度值时,他并没有改变。 p
我正在尝试在 Activity 加载完成后计算 View 的 x,y 位置。我所做的是 view.postDelayed(runnable, 2000) 工作正常。 code reviewer 对此不
我在 onCreate() 方法中使用 ViewTreeObserver.OnGlobalLayoutListener 来获取布局的宽度。它工作得很好,但是当我在 onGlobalLayout() 中
谁能用 C# 向我解释这段 Java 代码,因为我在 Android 上使用 Mono?例如,我在 Android 的 Mono 中找不到 OnGlobalLayoutListener。 在 Andr
我希望能够使用动画扩展我的 ListView 中的行。因此我需要知道正在扩展的 View 的高度。我在 ArrayAdapter 的 getView() 方法中使用它: mDetailsView.ge
我必须使用 OnGlobalLayoutListener 对象,然后删除监听器,我遇到了不推荐使用的方法的问题,我使用以下代码解决了这个问题。 protected void onCreate(Bund
我在两个 TextView 的父 View 上使用 viewTreeObserver.addOnGlobalLayoutListener , onGlobalLayout 以获得一个的宽度和另一个的高
我正在做一个非常简单的功能,比如在 TextView 的末尾添加省略号。 我可以在 onMeasure()、onLayout() 和 OnGlobalLayoutListener() 调用中添加该功能
在我正在构建的应用程序中,有一个 ListView ,实际上是一个带有子列表的可扩展 ListView - 并且有两种情况,具体取决于单击的组列表项:有时有一个子列表项,有时有两个子列表项.当单击包含
我在我的应用程序中显示一个带有自定义项的 ListView。自从我使用来自 47deg found here 的 android-swipelistview 以来,自定义项目已经做了很多工作。 . 因
我有一个 RecyclerView,我在其 View 持有者构造函数中添加了一个 onGlobalLayoutListener,如下所示 public CustomViewHolder(final V
根据文档,第一个是 当 View 的布局边界由于布局处理而改变时调用回调的接口(interface)定义。 第二个是 当全局布局状态或 View 树中 View 的可见性发生变化时调用回调的接口(in
我有一个普通的基本回收器 View 及其适配器。 在单个回收器 View 行中,我有一个 float 的 textView。 textView 宽度长度应按比例固定,即 30 % 的屏幕。 我想放置
我是一名优秀的程序员,十分优秀!