¿Hay alguna manera de detectar si el reloj es redondo?

Puede ser que me perdí algo, pero hay alguna bandera para saber si el reloj es redondo o cuadrado?

Podría imaginar que esto es importante si desea diseñar el fondo de las notificaciones.

Actualización para API 23:

Para determinar si la pantalla es redonda, puede utilizar

context.getResources().getConfiguration().isScreenRound() 

Referencia de Android

O puede utilizar los calificadores de recursos round y no notround y dejar que el sistema aplique los recursos adecuados, pero tenga cuidado de que esto no funcionará en los dispositivos que ejecutan la API 22 o inferior

Fuente

Gracias a la gente que señaló este cambio.

Viejo asnwer

Desde la charla de E / S de Google ( https://www.youtube.com/watch?v=naf_WbtFAlY#t=284 ):

Desde SDK 20, la clase android.view.View ha

 public void setOnApplyWindowInsetsListener(OnApplyWindowInsetsListener listener) 

Y OnApplyWindowInsetsListener tiene un método de devolución de llamada onApplyWindowsInset

 public WindowInsets onApplyWindowInsets(View view, WindowInsets windowInsets){ if (windowInsets.isRound()){ //Do stuff } } 

Es probable que desee utilizar el WatchViewStub, que se incluye en la biblioteca de soporte portátil. En el stub, se especifica un roundLayout y rectLayout, y el correcto se inflará automáticamente basado en la forma de pantalla del usuario. Vea la aplicación de ejemplo WatchViewStub que se incluye en el SDK para ver un ejemplo de cómo hacerlo.

EDIT: El código fuente para las muestras utilizables está ahora en línea. Para este caso, eche un vistazo a la muestra WatchViewStub, que "demuestra cómo especificar diferentes diseños para pantallas redondas y rectangulares": https://developer.android.com/samples/WatchViewStub/project.html

Referencia rápida:

En el diseño:

  <android.blah.WatchViewStub android:layout_width="match_parent" android:layout_height="match_parent" app:rectLayout="@layout/rect" app:roundLayout="@layout/round" /> 

Donde rectos y redondos son diseños diferentes para las exhibiciones rectangulares y redondas.

En la Actividad:

 setContentView(R.layout.main); final WatchViewStub stub = (WatchViewStub) findViewById(R.id.stub); stub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() { @Override public void onLayoutInflated(WatchViewStub stub) { mTextView = (TextView) stub.findViewById(R.id.text); Log.d(TAG, "TextView: " + mTextView.getText() + " view=" + mTextView); } }); 

El onLayoutInflated es opcional, pero le permite ver lo que está en el diseño que se infló, por lo que podría hacer personalizaciones adicionales en función de qué disposición de la WatchViewStub optaron por inflar (rectangular o redonda).

A partir de la API 23, puede utilizar los calificadores de recursos -notround y -notround . Así que no hay necesidad de utilizar WatchViewStub en algunas semanas.

Al igual que un pequeño ejemplo tomar esta disposición:

layout-round/example.xml :

 <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="@string/round_string"/> 

layout-notround/example.xml :

 <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="@string/square_string"/> 

De la causa usted podría también utilizar apenas una secuencia:

layout/example.xml :

 <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="@string/string"/> 

values-round/strings.xml :

 <resources> <string name="string">I am round</string> </resources> 

values-notround/strings.xml :

 <resources> <string name="string">I am square</string> </resources> 

fuente

El enfoque windowinsets falló en mis dispositivos, así que hice un pequeño truco, feo pero funcional.
Si necesita comprobar dentro de su actividad, añada en su diseño una vista de texto oculta con el valor "1" en el diseño redondo y "0" en el diseño rect.

 <TextView android:id="@+id/isRound" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="gone" android:text="1" /> 

Luego en la actividad:

 TextView isRoundText = (TextView) view.findViewById(R.id.isRound); boolean isRound = "1".equals(isRoundText.getText()); 

Me gustaría añadir mis propios dos centavos aquí porque creo que encontré una solución, aunque un poco ficticio, bastante simple y directo.

Por qué ? En primer lugar, las dos soluciones expuestas por @IonSpin funcionan perfectamente, pero la primera requiere SDK 23 mínimo y la otra es asíncrona …

Utilizando los calificadores de -notround y -notround , simplemente añada una vista vacía ficticia en el Layout XML de la actividad que se encuentra dentro de la carpeta de layout-round siguiente forma:

 <View android:layout_width="0dp" android:layout_height="0dp" android:id="@+id/isRound"/> 

Entonces en su Actividad onCreate() , haga simple:

 Log.d(TAG, "is not round ? " + (findViewById(R.id.isRound) == null)); 

Y debe imprimir en un smartwatch cuadrado:

MainActivity: ¿no es redondo? cierto

Como desarrollador nuevo en Android Wear, encuentro esta solución un poco increíble, pero funciona con mi SmartWatch 3 de Sony y con un dispositivo Virtual Android Android.

El único defecto / trade-off aquí es que usted tiene que colocar una vista ficticia en todos sus diseños …

¿Pueden ustedes confirmar que funciona para ustedes también?

Si he entendido correctamente va a usar recursos estándar de Android, lo que significa que sólo puede poner su diseño en el diseño de círculo y ya está.

  • La aplicación aleatoria se bloquea en Android Wear 5.0.X
  • ¿Cómo distribuyo mi Android Wear a usuarios alfa / beta en Google Play Store?
  • Android Wear Project Gradle Sync falla
  • No se puede usar Studio Designer con una clase derivada RelativeLayout personalizada
  • Android Wear WearableListView en un GridViewPager
  • Adición dinámica de elementos a FragmentGridPagerAdapter
  • Android Wear Google Analytics
  • Android Studio - No se pudo actualizar el proyecto Gradle - no se pudo encontrar el destino 4.4w
  • Cómo grabar audio en Android
  • Android OpenGLRenderer error "sucio"
  • ¿Es posible obtener datos PPG (Photoplethysmogram) de un reloj inteligente a través de Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.