¿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.
- DataAPI mucho más lento que MessageAPI?
- La aplicación de Android Wear no se instala a través del teléfono
- "Error al resolver: com.android.support:support-v4:26.0.0" y otros errores similares en la sincronización de Gradle
- Cómo detectar si el dispositivo android está emparejado con reloj de desgaste android
- Android Wear: Inicio de un servicio en la computadora de mano
- Adb no reconoce el equipo samsung live o lg g watch
- Android Wear BLE Función central
- Cómo configurar la altura del elemento WearableListView
- Elementos de datos de Android Wear
- Android: cómo apoyar la aplicación existente a Android
- Problema de conexión Android Bluetooth LE
- Obtener la entrada de voz de Android Wearable
- Detectar Moto 360 / circlular forma y onApplyWindowInsetListener no se llama
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á.
- Cómo enviar solicitud http en la aplicación android para acceder a REST API
- Librería de Lvl y melcocha de android