我试图在我的片段显示之后,或者在可能之前测量ImageView。
我听说,在onActivityCreated中它尚不可能。但不知何故,它适用于全局布局监听器。 - 怎么样? - 我有一个方法,测量并做一些代码,我只是不知道何时调用该方法。
有人可以举个例子吗?
测量方法的开头:
public void skalierung() {
InputStream dots=getResources().openRawResource(R.drawable.amountofdots);
Bitmap dotsBmp = BitmapFactory.decodeStream(dots);
View mainframe=(View)getActivity().findViewById(R.id.mainframe);
int breite=mainframe.getWidth();

谢谢!
答案 0 :(得分:4)
要设置GlobalLayoutListener
,您必须使用ViewTreeObserver
方法View
view.getViewTreeObserver()
获取addOnGlobalLayoutListener
:
返回此视图层次结构的ViewTreeObserver。当全局事件(如布局)发生时,视图树观察器可用于获取通知。
完成此操作后,您可以在ViewTreeObserever
OnGlobalLayoutListener
onGlobalLayout
:当全局布局状态或视图树中视图的可见性发生变化时调用的回调的接口定义。
在getWidth
方法内,您可以在所需视图上调用 View mainframe=(View)getActivity().findViewById(R.id.mainframe);
ViewTreeObserver vto = mainframe.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
skalierung(); // here you can call the getWidth and getHeight methods
ViewTreeObserver obs = mainframe.getViewTreeObserver();
// you have to reset the ViewTreeObserver each time to ensure the reuse of the OnGlobalLayoutListener
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
obs.removeOnGlobalLayoutListener(this);
} else {
obs.removeGlobalOnLayoutListener(this);
}
}
});
,这是一个示例:
{{1}}
希望它有所帮助。