我何时应该在片段中获得宽度视图

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宽度?

GrI*_*sHu 8

查看GlobalLayoutListener的帖子.您可以根据使用情况在Buttonin 上使用侦听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);
    }
  });
Run Code Online (Sandbox Code Playgroud)


And*_*rey 7

我遇到了类似的问题并在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()...