2014-09-13 9 views
5

Wygląda na to, że popularne sposoby wykrywania kształtu ekranu w Moto 360 nie działają poprawnie.Wykryj, że Moto 360/kształt pierścienia i onApplyWindowInsetListener nie są wywoływane

wiem, istnieją doniesienia mówiące, że windowInset.isRound() zwraca false w Moto 360.

Obecnie mój kod jest następujący

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"); 
    } 
}); 

Moim głównym problemem jest to, że nigdy nie jest wywoływana onApplyWindowInsets zarówno na moim LG G watch i Samsung Galaxy Gear Live. Zrobiłem test z użytkownikiem 360 i, zgodnie z testem, ta metoda również nie zostanie wywołana na jego urządzeniu.

  1. Dlaczego nie jest wywoływany OnApplyWindowInsetListener?
  2. Dlaczego ludzie, którzy otrzymali zgłoszenie do oddzwonienia, informują, że windowInset.isRound() zwraca wartość false w Moto 360?
  3. Jak mamy rozpoznać Moto 360 (i przyszłe z okrągłym kształtem)? Od Build.MODEL?

Odpowiedz

3

Znalazłem też, że setOnApplyWindowInsetsListener nie jest wywoływana na rzeczywistych urządzeniach. Sprawdza się na LG G Watch i Gear Live. Wygląda tak również w przypadku Moto 360. Zrobiłem następujące rozwiązania:

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 
     } 
    }); 

ustawiona w rundzie i układów kwadratowych innym identyfikatorem dla jednego ze składników i sprawdzić, który z nich jest załadowany, ponieważ nie mogę znaleźć żadnego innego sposobu. W przykładzie ustawionym dla GridViewPager pager_square w układzie kwadratowym i pager_round w układzie okrągłym. Nie bardzo ładne, ale działa dobrze jako obejście.

+0

Wygląda na to, że to obejście również nie działa. –

+0

Co masz na myśli, że to nie działa? Jeśli GridViewStub załaduje poprawny układ okrągły lub kwadratowy, zadziała, ponieważ używam go w ten sposób, a na ekranie kwadratowym ładuje kwadratowy układ. Nie mogę przetestować, jaki układ ładuje się na Moto 360, więc czy twoje oświadczenie oznacza, że ​​nie ładuje prawidłowego układu? –

+0

Dokładnie ... Moto 360 nie ładuje prawidłowego układu. –

0

Być może nadal nie masz tego problemu, ale zauważyłem, że mój okrągły układ nie był napompowany na moim Moto 360. Zamiast tego był mój prostokątny. Naprawiłem to, zmieniając motyw w pliku manifestu na DeviceDefault.

Powiązane problemy