所以我有一个通过Xml膨胀的视图。该视图有一个subView,我需要设置一个带有动态值的marginTop,如下所示:
toolbar.getHeight() - 100
因此,我无法将其设置为xml。我能做到这一点:
?attr/actionBarSize
但我需要特别toolbar.getHeight() - 100
完成此任务的正确方法是什么?我在活动的onCreate中执行此操作,我为该视图设置viewTreeObserver.addOnGlobalLayoutListener
,获取layoutParameters并添加边距。
这是正确的方法吗?我看到它的方式,绘制视图,当我在该视图的viewTreeObserver中运行一些代码时,必须再次重绘该视图。有没有办法避免这种双重渲染而不设置自定义视图?
答案 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