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?
- ¿Cómo puedo usar los iconos nativos de Android en mi nueva aplicación?
- Android Ver alinear abajo (de forma programática) sin XML
- Android XML: RuntimeException: No se pudo resolver el atributo en el índice 6
- Android Porcentaje Altura de diseño
- ¿Debo usar Java o XML para diseños de Android?
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
- Java.lang.UnsupportedOperationException: No se puede convertir a dimension: type = 0x12
- Establecer tiempo de espera en URL.openStream () Android
- Dynamic SAX Parser para UTF-8 o ISO-8859-1 XML codificado
- Creación de diseño de inicio de sesión como en la aplicación de facebook para Android
- Cómo poner 9 botones en 3 filas en el diseño de Android xml?
- ¿Es posible intercambiar diseños XML durante el tiempo de ejecución en Android?
- Alineación Vertical la gravedad no responde
- Vista personalizada en la disposición xml
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