Detectar Moto 360 / circlular forma y onApplyWindowInsetListener no se llama

Parece que las maneras comunes de detectar la forma de la pantalla del Moto 360 no funcionan correctamente.

Sé que hay informes diciendo que windowInset.isRound() devuelve false en el Moto 360.

Actualmente mi código es el siguiente

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

Mi principal problema es que el onApplyWindowInsets nunca se llama en mi reloj LG G y el Samsung Galaxy Gear Live. Hice una prueba con un usuario de 360 ​​y, según la prueba, ese método no se llama en su dispositivo tampoco.

  1. ¿Por qué no se llama a OnApplyWindowInsetListener ?
  2. ¿Por qué la gente que recibió el informe de devolución de llamada que windowInset.isRound() devuelve false en el Moto 360?
  3. ¿Cómo se supone que debemos reconocer el Moto 360 (y los futuros con la forma circular)? Desde el Build.MODEL ?

También encontré que setOnApplyWindowInsetsListener no se llama en los dispositivos reales. Se comprueba en LG G Watch y Gear Live. Parece que esto es cierto para Moto 360 también. Hice la siguiente solución:

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

Establecer en su configuración redonda y cuadrada ID diferente para uno de los componentes y comprobar que uno está cargado, porque no he encontrado ninguna otra manera. En el ejemplo que establezco para mi paginador GridViewPager_square en el diseño cuadrado y pager_round en el diseño redondo. No muy bonito, pero funciona bien como una solución.

Usted no puede tener este problema todavía, pero noté que mi disposición redonda no estaba siendo inflado en mi Moto 360. En lugar mi rectangular era. He arreglado esto cambiando el tema en el archivo de manifiesto a DeviceDefault .

  • Adición dinámica de elementos a FragmentGridPagerAdapter
  • WearListenerService onDataChanged comportamiento extraño
  • Android Wear: accede a las preferencias compartidas para móviles
  • Acceso a Android Wear Fit Data
  • GooglePlayServicesUtil: servicios de Google Play desactualizados. Requiere 5089000 pero fue encontrado 5077534
  • Lea los datos de color / luz subyacentes de Android Wear?
  • Android Wear: Actividad de notificación incrustada no iniciada en el emulador
  • ¿Por qué la búsqueda de Google no está actualizada en el emulador de Android?
  • Añadir Android Wear Module a mi aplicación
  • ¿Será esto posible con Android sdk usable
  • La aplicación Android Wear no está instalada
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.