我在 Linearlayout 中以编程方式添加 View(按钮)。LinearLayout 在 Fragment 中由 XML 布局。
我想获得按钮宽度,但总是返回 0。
我用谷歌搜索了这个问题,
getWidth 仅适用于WindowFocusChanged。
public void onWindowFocusChanged(boolean hasFocus) { }
但是 Fragment 没有这个方法。
如何在片段中获取视图宽度?
我在 Linearlayout 中以编程方式添加 View(按钮)。LinearLayout 在 Fragment 中由 XML 布局。
我想获得按钮宽度,但总是返回 0。
我用谷歌搜索了这个问题,
getWidth 仅适用于WindowFocusChanged。
public void onWindowFocusChanged(boolean hasFocus) { }
但是 Fragment 没有这个方法。
如何在片段中获取视图宽度?
我遇到了类似的问题,并在 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() 在渲染所有视图后运行...
查看帖子GlobalLayoutListener。您可以像使用过的那样在您的Button
in上使用侦听器。它也比.onCreateView()
onWindowFocusChanged
onWindowFocusChanged()
尝试如下:
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); } });