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をチェックしてください。Buttonで使用したのと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);
    }
  });
于 2013-03-28T06:07:17.540 に答える