9

我在 Linearlayout 中以编程方式添加 View(按钮)。LinearLayout 在 Fragment 中由 XML 布局。

我想获得按钮宽度,但总是返回 0。

我用谷歌搜索了这个问题,

getWidth 仅适用于WindowFocusChanged。

 public void onWindowFocusChanged(boolean hasFocus) { }

但是 Fragment 没有这个方法。

如何在片段中获取视图宽度?

4

2 回答 2

9

我遇到了类似的问题,并在 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() 在渲染所有视图后运行...

于 2015-02-15T18:37:37.823 回答
8

查看帖子GlobalLayoutListener。您可以像使用过的那样在您的Buttonin上使用侦听器。它也比.onCreateView()onWindowFocusChangedonWindowFocusChanged()

尝试如下:

  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);
    }
  });
于 2013-03-28T06:07:17.540 回答