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?
- ¿Es posible un selector de estilos?
- Constantes de diseño XML de Android
- Vista personalizada en la disposición xml
- Ajustar la relación de ancho en el diseño relativo
- Android Porcentaje Altura de diseño
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
- Dynamic SAX Parser para UTF-8 o ISO-8859-1 XML codificado
- ¿Debo usar Java o XML para diseños de Android?
- ¿Cómo puedo usar los iconos nativos de Android en mi nueva aplicación?
- Cómo hacer que RatingBar muestre cinco estrellas
- Los niños en el diseño lineal con igual relleno
- ¿Alternativas a xml desarrollando el diseño de aplicaciones para Android?
- Creación de diseño de inicio de sesión como en la aplicación de facebook para Android
- Repita un diseño complejo para cada registro
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