Programación en Android
Aprende a programar en Android y Java para crear aplicaciones móviles desde cero de manera profesional. Pasa tu...
Android es usado en diferentes dispositivos con distintos tamaños de pantalla. Para que nuestra app tenga una buena interfaz y sea usable en todos los dispositivos, es importante diseñar la app pensando en todos los tamaños de pantalla, así nuestra app podrá ser usada por muchos más usuarios
Tabla de contenidos
El diseño Multiscreen en Android , consiste en diseñar una aplicación que se adapte tanto a dispositivos de mano (handset) como a tablets . Entre otras ventajas, las aplicaciones que diseña esta adaptación, permiten mejorar la experiencia de usuario, ya que optimizan el diseño de las interfaces en función del dispositivo empleado para ejecutar la aplicación.
Veamos cómo implementarlo en Android:
En el Activity, ItemListActivity , nos encontramos con un layout > activity_item_list.xml . Dentro de este layout, nos encontramos con que existe un componente FrameLayout que contiene la siguiente línea que incluye a su vez otro layout:
<include layout="@layout/item_list" />
Pues bien, si intentamos acceder con la tecla Ctrl + Click a ese fichero, nos encontramos con que en realidad existen 2 ficheros con el mismo nombre.
La diferencia entre ambos es que Android en tiempo de ejecución decido cuál de los 2 debe cargar , basándose en un parámetro que haya sido definido. En este caso el parámetro es la anchura de la pantalla. Si la anchura de la pantalla es menor de 900dp, se cargará el layout item_list.xml cuyo contenidos es el siguiente:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/item_list"
android:name="com.miguelcr.gridview.ItemListFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
app:layoutManager="LinearLayoutManager"
tools:context="com.miguelcr.gridview.ItemListActivity"
tools:listitem="@layout/item_list_content" />
Si por el contrario, la anchura de la pantalla del dispositivo es mayor o igual que 900dp, el layout que se carga será el fichero item_list.xml cuyo contenido es el siguiente:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:baselineAligned="false"
android:divider="?android:attr/dividerHorizontal"
android:orientation="horizontal"
android:showDividers="middle"
tools:context="com.miguelcr.gridview.ItemListActivity">
<!--
This layout is a two-pane layout for the Items
master/detail flow.
-->
<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/item_list"
android:name="com.miguelcr.gridview.ItemListFragment"
android:layout_width="@dimen/item_width"
android:layout_height="match_parent"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
app:layoutManager="LinearLayoutManager"
tools:context="com.miguelcr.gridview.ItemListActivity"
tools:listitem="@layout/item_list_content" />
<FrameLayout
android:id="@+id/item_detail_container"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="3" />
</LinearLayout>
Como podemos apreciar en este segundo caso, se trataría de una tablet y por tanto, en una misma pantalla muestra el Menú lateral y la vista detalle del elemento seleccionado de la lista del menú lateral.
De esta ingeniosa manera se cargan layouts diferentes en tiempo de ejecución en función de si es una tablet o un handset.
Pero y ¿cómo sabes desde el Activity en cuál de los 2 casos nos encontramos? El código generado por Android Studio nos da la respuesta. Si intentamos obtener una referencia al elemento de la interfaz que se muestra para las tablets FrameLayout , cuyo id es item_detail_container , y la referencia no es nula, querrá decir que la aplicación se está ejecutando en una tablet, en otro caso, será un handset .
Las líneas de código para hacer esa comprobación son las siguientes:
if (findViewById(R.id.item_detail_container) != null) {
// The detail container view will be present only in the
// large-screen layouts (res/values-w900dp).
// If this view is present, then the
// activity should be in two-pane mode.
mTwoPane = true;
}
Hasta aquí la explicación de cómo detectar y adaptar en tiempo de ejecución el diseño multiscreen en aplicaciones Android.
También te puede interesar
Aprende a programar en Android y Java para crear aplicaciones móviles desde cero de manera profesional. Pasa tu...
Conoce las diferentes unidades de medición en Android, mira las diferencias entre PX, DP y SP en Android.
Mira como hacer notificaciones push para tu aplicación móvil de Android.