2014-09-13 12 views
5

Sembra che i metodi comuni per rilevare la forma dello schermo del Moto 360 non funzionino correttamente.Rileva Moto 360/forma circolare e onApplyWindowInsetListener non viene chiamato

So che ci sono rapporti che dicono che windowInset.isRound() restituisce false nel Moto 360.

Attualmente il mio codice è il seguente

WatchViewStub viewStub = new WatchViewStub(this); 
viewStub.setRoundLayout(com.pizzaentertainment.weatherwatchface.R.layout.bau); 
viewStub.setRectLayout(com.pizzaentertainment.weatherwatchface.R.layout.bau_rect); 
viewStub.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() { 
    @Override 
    public WindowInsets onApplyWindowInsets(View view, WindowInsets windowInsets) { 
     Log.d("ISWHAT?", "ASD" +windowInsets.isRound()); 
     return windowInsets; 
    } 
}); 
addContentView(viewStub, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); 
viewStub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() { 
    @Override 
    public void onLayoutInflated(WatchViewStub watchViewStub) { 
     Log.d("INFLATED", "INFLATED"); 
    } 
}); 

Il mio problema principale è che il onApplyWindowInsets mai viene chiamato sia sul mio LG Orologio G e Samsung Galaxy Gear Live. Ho fatto un test con un utente 360 ​​e, secondo il test, anche quel metodo non viene chiamato sul suo dispositivo.

  1. Perché non viene chiamato OnApplyWindowInsetListener?
  2. Perché le persone che hanno eseguito il callback hanno segnalato che windowInset.isRound() restituisce false su Moto 360?
  3. Come dovremmo riconoscere il Moto 360 (e quelli futuri con la forma circolare)? Dal Build.MODEL?

risposta

3

Ho trovato anche che setOnApplyWindowInsetsListener non viene chiamato sui dispositivi reali. Viene controllato su LG G Watch e Gear Live. Sembra che questo sia vero anche per Moto 360. Ho fatto la seguente soluzione:

WatchViewStub stub = (WatchViewStub) findViewById(R.id.stub); 
    stub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() { 
     @Override 
     public void onLayoutInflated(WatchViewStub stub) { 
      Log.d(TAG, "onLayoutInflated()"); 
      m_pager = (GridViewPager) findViewById(R.id.pager_square); 
      m_roundScreen = false; 
      if (m_pager == null) { 
       m_pager = (GridViewPager) findViewById(R.id.pager_round); 
       m_roundScreen = true; 
      } 
      // ... do other pager initializations 
     } 
    }); 

impostata nel tondo e layout quadrati diverso ID per uno dei componenti e verificare che uno è caricato perché non ho trovato nessun altro modo. Nell'esempio che ho impostato per il mio GridViewPager pager_square nel layout quadrato e pager_round nel layout rotondo. Non molto carina ma funziona bene come soluzione alternativa.

+0

Sembra che questa soluzione alternativa non funziona neanche. –

+0

Cosa vuoi dire che non funziona? Se GridViewStub carica il layout rotondo o quadrato corretto funzionerà perché lo utilizzo in quel modo e sullo schermo quadrato carica il layout quadrato. Non riesco a testare quale layout carica su Moto 360, quindi la tua affermazione significa che non carica il layout corretto? –

+0

Esattamente ... Moto 360 non carica il layout corretto. –

0

Si potrebbe non avere ancora questo problema, ma ho notato che il mio layout rotondo non veniva gonfiato sul mio Moto 360. Invece il mio rettangolare era. Ho risolto questo problema modificando il tema nel file manifest su DeviceDefault.