dmn*_*nlk 9 android android-layout android-fragments
我在Linearlayout.LinearLayout中以编程方式添加了View(按钮),在Fragment中由XML进行了布局.
我想获得按钮宽度,但总是返回0.
我用Google搜索了这个问题,
getWidth仅适用于WindowsFocusChanged.
public void onWindowFocusChanged(boolean hasFocus) { }
Run Code Online (Sandbox Code Playgroud)
但片段没有这种方法.
如何在Fragment中获取View宽度?
查看GlobalLayoutListener的帖子.您可以根据使用情况在Button
in 上使用侦听onCreateView()
器onWindowFocusChanged
.它也比它更可靠onWindowFocusChanged()
.
试试如下:
Run Code Online (Sandbox Code Playgroud)final View myView = profileContainer.findViewById(R.id.sub_page_padding); ViewTreeObserver vto = profilePadding.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { Log.d("TEST", "Height = " + myView.getHeight() + " Width = " + myView.getWidth()); ViewTreeObserver obs = profilePadding.getViewTreeObserver(); obs.removeGlobalOnLayoutListener(this); } });
我遇到了类似的问题并在Fragment回调onViewCreated()中解决了这个问题,如下所示:
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
view.post(new Runnable() {
@Override
public void run() {
// do operations or methods involved
// View.getWidth(); or View.getHeight();
// here
}
});
}
Run Code Online (Sandbox Code Playgroud)
在渲染所有视图后运行run()...