11568


Fragment の onCreateView()において、  
画面サイズの取得をしようとしましたが、値は0を返します。  
Fragment の画面サイズを取得するにはどうすればいいでしょうか？

[code]

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
    
        View rootView = inflater.inflate(R.layout.test_diet, container, false);
        float viewWidth = rootView.getWidth();
        float viewHeight = rootView.getHeight();
        Log.d("TestFragment", "横は" + viewWidth + ",縦は" + viewHeight);
        return rootView;
    }
    
[/code]


CC BY-SA 3.0
2015-06-20T02:11:38.123
11542
2016-02-23T13:08:10.837
7699
question
android java
Fragment の onCreateView() で、画面サイズが取得できない


ビューが幅と高さを得るためにはレイアウトがなされる必要があります。 onCreateView
の中ではまだビューのインスタンスを作ったというだけの段階であり、レイアウトされてないので、幅も高さも 0 なのは仕方ないです。

フラグメントのビューが最初にレイアウトされるのは onResume
の後になるので、フラグメント設置時に幅と高さを得る方法というのは、「別スレッドで取得できるまで待つ」くらいしか思いつきません。

[code]

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        final View rootView = inflater.inflate(R.layout.test_diet, container, false);
        new Thread(new Runnable() {
            @Override
            public void run() {
                int i = 0;
                while (rootView.getWidth() == 0 || rootView.getHeight() == 0) {
                    if (++i > 300) {
                        // 時間切れ離脱
                        return;
                    }
                    try {
                        Log.d("TestFragment", "waiting...");
                        TimeUnit.MILLISECONDS.sleep(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                float viewWidth = rootView.getWidth();
                float viewHeight = rootView.getHeight();
                Log.d("TestFragment", "横は" + viewWidth + ", 縦は" + viewHeight);
            }
        }).start();
        return rootView;
    }
    
[/code]


CC BY-SA 3.0
2015-06-21T01:55:44.827
11568
2015-06-21T01:55:44.827
7558
11542
answer


英語版のstackoverflowの引用ですが、私は以下の方法でやってます。  
onCreateView()ですぐに値を確定する方法はありません。  
<https://stackoverflow.com/a/4406090/3741336>


CC BY-SA 3.0
2016-02-23T13:08:10.837
22440
2016-02-23T13:08:10.837
2017-05-23T12:38:55.250
-1
8461
11542
answer