water tag tac25 resistant reloj precio heuer connected caratulas android wear-os

android - tac25 - tag heuer connected water resistant



¿Hay alguna forma de detectar si el reloj es redondo? (7)

Podría ser que me haya perdido 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.


A partir de la API 23, puede utilizar los calificadores de recursos -notround y -notround . Por lo tanto, no es necesario en algunas semanas usar WatchViewStub .

Solo como un pequeño ejemplo toma estos diseños:

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"/>

Por esta razón también puedes usar una sola cuerda:

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>

source


El enfoque de los ajustes de ventana falló en mis dispositivos, así que hice un pequeño truco, feo pero funcional.
Si necesita verificar su actividad, a continuación, agregue en su diseño una vista de texto oculta con el valor "1" en el diseño redondo y "0" en el diseño correcto.

<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 agregar mis propios dos centavos aquí porque creo que encontré una solución, aunque un poco tonta, bastante simple y directa.

Por qué ? Primero, las dos soluciones expuestas por @IonSpin funcionan perfectamente, pero la primera requiere un mínimo de 23 SDK, y la otra es asíncrona ...

Usando los calificadores de -notround y de -notround , simplemente agregue una vista vacía ficticia en su diseño de XML de actividad que se encuentra dentro de la carpeta de layout-round siguiente manera:

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

Luego, en su Actividad en onCreate() , simplemente haga:

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

Y debe imprimir en un smartwatch cuadrado:

MainActivity: no es redondo? cierto

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

El único defecto / compensación aquí es que tiene que colocar una vista ficticia en todos sus diseños ...

¿Pueden ustedes confirmar que también les funciona?


Probablemente querrá usar WatchViewStub, que se incluye en la biblioteca de soporte portátil. En el código auxiliar, especifica un roundLayout y rectLayout, y el correcto se inflará automáticamente según la forma de la pantalla del usuario. Consulte la aplicación de ejemplo WatchViewStub que se incluye en el SDK para ver un ejemplo de cómo hacerlo.

EDITAR: El código fuente de las muestras portátiles ahora está en línea. Para este caso, eche un vistazo a la muestra de WatchViewStub, que "muestra 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 rect y round son diseños diferentes para pantallas 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); } });

OnLayoutInflated es opcional, pero le permite ver qué hay en el diseño inflado, por lo que podría hacer personalizaciones adicionales basadas en el diseño que WatchViewStub eligió inflar (rectangular o redondo).


Si entendí correctamente, utilizará los recursos estándar de Android, lo que significa que puedes poner tu diseño en círculo de diseño y listo.


Siguiendo la respuesta de IonSpin , las siguientes líneas funcionan bien:

if (getResources().getConfiguration().isScreenRound()) { //code for round wearables } else { //code for notround wearables }


Actualización para API 23:

Para determinar si la pantalla es redonda puedes usar

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

Referencia de Android

O puede usar los calificadores de recursos de round y no round y dejar que el sistema aplique los recursos adecuados, pero tenga cuidado de que esto no funcione en dispositivos con API 22 o inferior.

Source

Gracias a las personas que señalaron este cambio.

Antigua asnwer

Desde Google I / O talk ( https://www.youtube.com/watch?v=naf_WbtFAlY#t=284 ):

Desde el SDK 20 la clase android.view.View tiene

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