2016-06-23 17 views
0

android wear(API 23)の時計アクティビティでWatchViewStubを使用しています。WatchViewStubの幅と高さ

私は、ビューの中心を基準にタッチイベントから計算を行いたいので、アクティビティのビューの幅と高さを取得しようとしています。

残念ながら、両方の私のスタブビューのgetWidth()getHeight()いつも私がsetOnLayoutInflatedListenerでリスナーを設定することで膨張するために、レイアウトを待つ場合でも、0を返します。

WatchViewStubの実際のサイズはどのように取得できますか?

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

WatchViewStub stub = (WatchViewStub) findViewById(R.id.watch_view_stub); 
Log.d(TAG, stub.getWidth()); // -> 0 
Log.d(TAG, stub.getHeight()); // -> 0 

stub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() { 
    @Override 
    public void onLayoutInflated(WatchViewStub stub) { 
     Log.d(TAG, stub.getWidth()); // -> 0 
     Log.d(TAG, stub.getHeight()); // -> 0 
    } 
    }); 
} 
+1

は、ここでは、コードの関連部分です。 'onMeasure'を無効にしてみてください – jitinsharma

+0

@jitinsharmaありがとう。しかし私は、ビューをオーバーライドする必要がないソリューションを好む。 –

答えて

0

代わりにこれを試してください:あなたはあまりにも早く関数を呼び出すことが可能

stub.getViewTreeObserver() 
     .addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
      @Override 
      public void onGlobalLayout() { 
       stub.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
       Log.d(TAG, "dimens = " + stub.getWidth() + " x " + stub.getHeight()); 
      } 
     });