2016-06-23 25 views
0

Ich verwende eine WatchViewStub auf einer Uhr Aktivität mit Android-Verschleiß (API 23).Breite und Höhe eines WatchViewStub

Ich versuche, seine Breite und Höhe der Ansicht meiner Aktivität zu erhalten, da ich einige Berechnungen von den Berührungsereignissen relativ zur Mitte der Ansicht durchführen möchte.

Leider meine beiden Stummel Ansicht des getWidth() und getHeight() immer 0 zurückkehren, auch wenn ich für das Layout warten, indem ein Zuhörer mit setOnLayoutInflatedListener aufgeblasen werden.

Wie kann ich die tatsächliche Größe der a WatchViewStub holen?

Hier ist der relevante Teil des Codes:

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

Sie Funktionen zu früh anrufen werden. Versuchen Sie, 'onMeasure' zu ​​überschreiben – jitinsharma

+0

@jitinsharma Vielen Dank. Allerdings bevorzuge ich eine Lösung, bei der ich die Ansicht nicht überschreiben muss. –

Antwort

0

dies stattdessen versuchen:

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