在运行时更改视图属性的正确方法

时间:2016-08-18 13:49:01

标签: android view layoutparams

所以我有一个通过Xml膨胀的视图。该视图有一个subView,我需要设置一个带有动态值的marginTop,如下所示:

toolbar.getHeight() - 100

因此,我无法将其设置为xml。我能做到这一点:

?attr/actionBarSize

但我需要特别toolbar.getHeight() - 100

完成此任务的正确方法是什么?我在活动的onCreate中执行此操作,我为该视图设置viewTreeObserver.addOnGlobalLayoutListener,获取layoutParameters并添加边距。

这是正确的方法吗?我看到它的方式,绘制视图,当我在该视图的viewTreeObserver中运行一些代码时,必须再次重绘该视图。有没有办法避免这种双重渲染而不设置自定义视图?

1 个答案:

答案 0 :(得分:1)

onCreate()内,您可以在当前上下文中查找此属性的值:

int[] attrIds = new int[1]{ R.attr.actionBarSize };
TypedArray a = obtainStyledAttributes(attrIds);
// first argument is index in attrIds, second argument is
// a default value to return if not found
int actionBarSize = a.getDimensionPizelSize(0, 0);
a.recycle();
// do something with actionBarSize
相关问题