我想以编程方式向布局添加一些图形。我想根据xml layout file
中其他图形元素的位置动态定位图形。
如果我尝试在onCreateView
或onViewCreated
中访问它们,则布局中图形的位置均为0。这可能是因为布局还没有完成膨胀。
在哪里可以连接我的代码以确保片段的布局已完成膨胀?
目前我已使用viewTreeObserver
解决了问题(请参阅下面的代码),但这真的是最聪明的方法吗?
我正在片段中工作。
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.myfrg, container, false);
mMainLayoutCanvas = (RelativeLayout)v.findViewById(R.id.myfrg_mainlayout);
mMainLayoutCanvas.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
initializeUI();
}
});
return v;
}
答案 0 :(得分:1)
onCreateView会扩展Fragment
的布局。您只能在onCreateView返回后找到视图。
我会使用onActivityCreated()
方法查找视图,然后更新/定位它们。
可能有一个完全不同的解决方案,我刚开始使用Android
答案 1 :(得分:0)
可以在膨胀的片段布局上设置preDraw侦听器,这将在所有维度都已解析后为您提供回调。
layout = inflater.inflate(...);
ViewTreeObserver obs = layout.getViewTreeObserver();
obs.addOnPreDrawListener(mListener);
在完成操作后不要忘记删除侦听器,否则会导致无限循环,因为任何布局操作都会导致再次调用它。
obs.removePreDrawListener(mListener);