Ocultar vistas declarativamente basado en el tamaño de pantalla en Android

En android xml: ish

¿Hay alguna manera de cambiar un atributo de visibilidad basado en el tamaño / orientación del diseño en el xml directamente?

Tengo un botón en un fragmento que debe ser visible sólo para tamaños de pantallas pequeñas. En los tamaños más grandes, digamos que la disposición grande, quiero que se oculte.

Claro, puedo escribir código para esto sin ningún problema, pero por razones académicas me gustaría saber que es posible hacer algo como esto.

<Button android:id="@+id/btn_check_availability" style="@style/product_info_footer_button" android:layout_width="fill_parent" android:layout_height="35dp" android:text="@string/check_availability" android:visibility="<magic expression here>" /> 

Gracias

Johan

Esta respuesta se basa en la explicación proporcionada aquí por Flávio Faria .

El visible , gone , etc pueden ser valores asignados a sus valores de enum correspondientes en un recurso de cadena – lo que significa que puede crear un visibilty.xml con recursos de cadena para cada diseño que desee y Android resolverá automáticamente el que desea para cada pantalla tipo.

Yo recomendaría lo siguiente:

/res/values/visibilty.xml:

 <?xml version="1.0" encoding="utf-8"?> <resources> <!-- Enum values pulled from Android source --> <string name="visibility_visible">0</string> <string name="visibility_invisible">1</string> <string name="visibility_gone">2</string> <string name="product_info_footer_button_visibility">@string/visibility_visible</string> </resources> 

/res/values-large/visibilty.xml:

 <?xml version="1.0" encoding="utf-8"?> <resources> <string name="product_info_footer_button_visibility">@string/visibility_invisible</string> </resources> 

Y luego puede hacer referencia a la visibilidad de la siguiente manera para su botón:

 <Button android:id="@+id/btn_check_availability" style="@style/product_info_footer_button" android:layout_width="fill_parent" android:layout_height="35dp" android:text="@string/check_availability" android:visibility="@string/product_info_footer_button_visibility" /> 

Advertencia : Esto depende del dispositivo que tenga los mismos valores de enum para la visibilidad (0/1/2) como se define en la fuente AOSP. Los fabricantes de dispositivos y los creadores de ROM personalizados pueden cambiar estos valores, en cuyo caso este código probablemente no funcionará como se desea.

El atributo android: visibility es un int (como muchos atributos) para que pueda hacer lo siguiente:

Defina un archivo de recursos denominado visibility.xml en los directorios de recursos de puerto de valores y de valores. El contenido de este archivo es así:

Values-port / visibility.xml

 <?xml version="1.0" encoding="utf-8"?> <resources> <integer name="buttonvisibility">0</integer> <!-- 0 is the value for android:visible --> </resources> 

Valores-tierra / visibilidad.xml

 <?xml version="1.0" encoding="utf-8"?> <resources> <integer name="buttonvisibility">1</integer> <!-- 1 is the value for android:invisible --> </resources> 

Y en su layout.xml:

 <Button android:id="@+id/btn_check_availability" style="@style/product_info_footer_button" android:layout_width="fill_parent" android:layout_height="35dp" android:text="@string/check_availability" android:visibility="@integer/buttonvisibility" /> 

Funciona: btn_check_availability es visible en vertical e invisible en el paisaje.

Nota: este ejemplo utiliza la orientación del diseño como discriminador, pero por supuesto puede hacerlo con cualquier calificador de recursos (como dimensión, densidad, …)

No hay expresiones mágicas disponibles en XML. Si solo.

Existen dos enfoques para este problema:

A / utilice el sistema de carpetas extraíble. Las carpetas dibujables se pueden copiar y nombrar para que sean conscientes de DPI siguiendo las convenciones que se dicten aquí: Soporte de múltiples pantallas .

B / Hágalo programáticamente. En el tiempo de ejecución, compruebe si DPI de la pantalla y mostrar / ocultar la vista en consecuencia.

¿Ha examinado el uso de incluye y múltiples diseños organizados en las carpetas de diseño de tamaño / orientación adecuadas? Algunos diseños podrían simplemente no tener el botón o tenerlo oculto por defecto.

Reutilización de diseños con inclusión

Proporcionar recursos alternativos

  • Escala de un dibujable dentro de un botón?
  • Constantes de diseño XML de Android
  • ViewPager utilizando archivos xml para las vistas
  • ¿Cómo hacer cadenas XML en negrita, etc subrayado?
  • Padding no funciona en Android
  • ¿Es concatenación de cadenas de recursos / concatenación de cadenas, posible en el archivo de diseño?
  • Búsqueda de diseños por ID
  • Configuración de Android Ancho de botón de la mitad de la pantalla
  • Android: ¿Cómo puedo hacer que las vistas de texto floten a la izquierda?
  • ¿Alternativas a xml desarrollando el diseño de aplicaciones para Android?
  • Atributo de visibilidad en las preferencias xml no funciona? (Android 2.3)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.