Está en la página 1de 17

Sistemas de Telefonía Fija y Móvil

I.E.S. “EL PALMERAL” ORIHUELA


CURSO 2022/23 Antonio Serna Ruiz

UNIDAD DE TRABAJO Nº6 - III

PROGRAMACIÓN PARA TELÉFONOS MÓVILES ANDROID


Resultados de aprendizaje: Caracteriza aplicaciones para sistemas de telefonía móvil, identificando
su estructura y analizando su funcionamiento en los equipos que las integran.

Tiempo Estimado: 5h.

1. HERRAMIENTAS DE LA PALETA DE DISEÑO - I


Android Studio incorpora en modo diseño (Design), una paleta de herramientas que facilitan mucho el
trabajo a la hora de programar aplicaciones, ya que de forma gráfica permite incorporar diferentes
elementos a la vista o vistas (Layouts) en la que se desarrolla la actividad (Activity).

1
Sistemas de Telefonía Fija y Móvil
I.E.S. “EL PALMERAL” ORIHUELA
CURSO 2022/23 Antonio Serna Ruiz

Figura-1. Paleta de diseño en Android Studio

Entre las herramientas que proporciona esta paleta tenemos los contenedores o Layouts, para el
agrupamiento de componentes visuales y de acción están los Widgets, los campos de texto en Text,
elementos contenedores para acciones en Containers, elementos para botones de acción en Buttons,
aplicaciones con mapas en Google y herramientas de versiones antiguas en Legacy.

2
Sistemas de Telefonía Fija y Móvil
I.E.S. “EL PALMERAL” ORIHUELA
CURSO 2022/23 Antonio Serna Ruiz

1.1. LAYOUTS

Los Layouts permiten crear vistas (interfaces) para la distribución de los diferentes objetos en la
pantalla de la aplicación. Es muy importante su elección, ya que de ella depende la dificultad
posterior en la recolocación del resto de elementos. En una misma ventana puede haber varios tipos
diferentes de layouts, permitiéndose su anidación, es decir, superpuestos.

 ConstraintLayout: este tipo de layout aparece con la versión 2.2 de Android Studio y con el
objeto de sustituir a la RelativeLayout, ya que permite la ubicación de los objetos con mayor
flexibilidad sin necesidad de recurrir al anidamiento, y donde todos ocupan posiciones
relativas determinadas, pudiendo abordar interfaces más complejas.
Podemos ver seguidamente, tanto en modo texto como modo diseño, el aspecto que presenta
un programa que se inicia nuevo, en el que por defecto tendremos el layout principal de tipo
Constraint. (ver: https://www.journaldev.com/13590/android-constraintlayout).

Observar las líneas quebradas que


permiten justificar el objeto
respecto a los márgenes del layout.

Figura-2. Vista del Layout Constraint en el inicio de un nuevo proyecto

3
Sistemas de Telefonía Fija y Móvil
I.E.S. “EL PALMERAL” ORIHUELA
CURSO 2022/23 Antonio Serna Ruiz

 LinearLayout: Permiten colocar cada objeto en una línea, que puede ser horizontal o
vertical, de forma que si es en horizontal habrá un número determinado de objetos por línea y
en vertical podrá haber varios objetos agrupados en columna y según su tamaño.
 FrameLayout: Es el más sencillo y coloca los objetos en determinadas ubicaciones ya
preestablecidas y en la parte superior izquierda de las mismas. Dichas ubicaciones pueden ser
redimensionadas.
 TableLayout: Son Layouts organizados a modo de tabla (filas y columnas), en los que en
cada celda podemos colocar un objeto diferente y se irá configurando la tabla según el
tamaño de los objetos.
 TableRow: Son Layouts organizados a modo de tabla en los que sólo hay una fila a la que se
incorporan los objetos en diferentes columnas.
 Space: permite crear espacios entre objetos en diseños de propósito general.

Como se ha dicho, los layouts permiten el anidamiento, es decir, que unos contengan a otros, por lo
que una cuestión importante es fijarse en los siguientes atributos (Attributtes):
Tanto en layout:width (ancho), como en layout:height (alto), se debe jugar con su ajuste, bien al
tamaño total de la ventana (match_parent), o bien ajustarse a exactamente al contenido del objeto
(wrap_content). También admiten valores en “dp” (puntos de display).

Esquema de layouts
y objetos incluidos
en la interface de la Herramienta de
aplicación ajuste de los layouts

Figura-3. Propiedades de ajuste de los Layouts

Asimismo, se puede jugar con los colores de fondo para diferenciar los diferentes layouts. Para ello, se
recurre a la propiedad background del layout, donde se puede elegir entre las posibilidades de crear
colores para el proyecto mediante la paleta de colores o también personalizados. Es aconsejable para
mantener siempre la misma tonalidad de color, copiar el código hexadecimal compuesto por 8 dígitos
y anteponer # (#XXXXXXXX). Los colores personalizados que se incorporen al proyecto se podrán
ver en \res\values\colors.xml.

4
Sistemas de Telefonía Fija y Móvil
I.E.S. “EL PALMERAL” ORIHUELA
CURSO 2022/23 Antonio Serna Ruiz

Figura-4. Paleta de colores y ventana para incorporar nuevos colores

Figura-5. Vistas de algunos de los Layouts disponibles

Otra propiedad de los layouts que facilita la ubicación de los objetos es la layout:margin, que
permite establecer las distancias en “dp” a los márgenes y la layout:gravity, mediante la cual se
pueden disponer los diferentes objetos que pertenezcan a ese layout con una alineación determinada:
top, botton, center, left, right, o layout:padding, que establece el espacio entre el borde y los
elementos de su interior, etc.

5
Sistemas de Telefonía Fija y Móvil
I.E.S. “EL PALMERAL” ORIHUELA
CURSO 2022/23 Antonio Serna Ruiz

Siempre que se cree un proyecto por primera vez, aparece un ConstraintLayout por defecto en el
archivo activity_main.xml. Este layout puede ser cambiado por otro, simplemente cambiando el tipo
tanto a inicio como al final en la vista de texto, o bien borrarlo en la ventana de la estructura de la
interface e insertar uno nuevo. Asimismo, para incorporar un layout nuevo, bastará con arrastrarlo
desde la paleta a la ventana de la estructura de interface (Figura-6).

Figura-6. Vista del código inicial del archivo activity_main.xml

1.2. TEXT

Son campos de texto destinados a que el usuario introduzca texto en ellos mediante el teclado
asociado que aparece.

 TextView
Representan cuadros de texto. Para incorporarlos hay que pinchar y arrastrarlos hasta la
ventana de la estructura de la interface y situarlo en el Layout que se desee. Haciendo click en
el recuadro de texto mostrará los atributos Figura-8, donde se
puede editar el texto del recuadro y también se nos muestra el
identificador asociado (id , referencia a un recurso que se
utilizará cuando se escriba código en el ManinActivity.java), el
cual permitirá localizarlo dentro de la estructura del programa. Es
importante poner un id a cada objeto, sobre todo a los que tengan
funcionalidades, como pueden ser los botones.

Figura-7. Menú Text

6
Sistemas de Telefonía Fija y Móvil
I.E.S. “EL PALMERAL” ORIHUELA
CURSO 2022/23 Antonio Serna Ruiz

Figura-8. Atributos del texto y aspecto en la ventana correspondiente

 Plain Text
Permite la introducción de texto sencillo para ser editado.
 Password, Password (Numeric)
Permite la introducción de un password mostrando asteriscos o
puntos “*”.
 E-mail
Permite la introducción de direcciones de correo electrónico.
Ahora el teclado llevará la “@”.
 Phone
Permite la introducción de números de teléfono. Ahora será
numérico el teclado.
 Postal Address
Permite la introducción de códigos postales.
 Multiline Text
Permite la introducción de varias líneas de texto.
 Time, Date
Permite la introducción de la hora y fecha.
 Number, Number (Signed), Number (Decimal)
Permite la introducción de datos numéricos estándar,
con signo y con decimales. Figura-9. Vista de algunos Text
 AutoCompleteTextView
Para recuadros de texto en formato autocompletar

7
Sistemas de Telefonía Fija y Móvil
I.E.S. “EL PALMERAL” ORIHUELA
CURSO 2022/23 Antonio Serna Ruiz

La incorporación de texto a las aplicaciones puede realizarse sencillamente de esta forma o bien
de manera referenciada a través del archivo res/values/strings.xml. Si se hace referenciando el
texto en el archivo strings.xml, dicho texto y sus propiedades se podrán utilizar en cualquier parte
del programa con tan solo llamar a su identificador.

Figura-10. Forma de utilizar de texto referenciado

1.2. BUTTONS

Son componentes visuales (objetos) que podemos incorporar a los layouts y que ocuparán un área
determinada (condicionada por el layout que los contiene), de forma que gestionarán los eventos que
puedan producirse en dicha área. Podemos encontrar los siguientes:

 Button: Crea botones de acción estándar. Las acciones deben


ser incorporadas desde la ventana de propiedades, así como en
algunos de los archivos importantes del proyecto como el
MainActivity.java. En las propiedades se puede cambiar su
ubicación, alineación, color, etc., pero pinchando y
arrastrando dentro del simulador, también se cambia la
ubicación y se actualiza en propiedades.

 ToggleButton: es igual que un botón, pero que se queda


anclado en el estado correspondiente tras la pulsación (ON/OFF)

Figura-11. Fragmento del código de un botón y propiedades

8
Sistemas de Telefonía Fija y Móvil
I.E.S. “EL PALMERAL” ORIHUELA
CURSO 2022/23 Antonio Serna Ruiz

 RadioButton, CheckBox, Switch, Chip: Son botones que


tienen dos estados, de manera que permiten seleccionar una de
las dos opciones que presentan ambos estados. En el cuadro de
diálogo se permite determinar el estado que adoptarán por
defecto (propiedad Cheked). Como todos los botones, su
funcionalidad debe programarse en el MainActivity.java.

Figura-12. Vista en el simulador de algunos Buttons

 ImageButton
Es un botón con una imagen. Las imágenes deben estar previamente en las carpetas
\res\drawable y/o en las \res\mimap (según tamaño) para ello seleccionar la vista Project o
Packages. Al insertar este objeto, se abre una ventana donde se nos permitirá elegir entre
colores o imágenes del proyecto, las que hemos incorporado a las carpetas mencionadas.
Bastará con elegir y se trasladará al botón de imagen.
Importante: El nombre del archivo de las imágenes debe ir todo en minúscula y sin signos
de puntuación.

Figura-13. Ventana de selección de imagen para un ImageButton

1.4. WIDGETS

Son elementos que se pueden incorporar a las aplicaciones y que sirven para
contener imágenes y elementos multimedia.

Las carpetas del árbol del proyecto contienen imágenes según la densidad o
resolución: mimap-mdpi para densidad media, mimap-hdpi para densidad alta y
mimap-xhdpi para densidad extra alta.

9
Sistemas de Telefonía Fija y Móvil
I.E.S. “EL PALMERAL” ORIHUELA
CURSO 2022/23 Antonio Serna Ruiz

 View
Permite incorporar vistas de forma genérica a las aplicaciones.
 ImageView
Inserta una imagen que puede tomarse mediante el cuadro de diálogo y desde las carpetas de
imágenes. El procedimiento es igual que para un botón de imagen.
 WebView
Inserta una ventana destinada a alojar una página web.
 VideoView
Inserta un elemento multimedia destinado a reproducir una secuencia de vídeo.
 CalendarView
Permite incorporar calendarios a las aplicaciones.
 ProgressBar, SeekBar, RatingBar: Son indicadores mediante círculos, barras y estrellas
que muestran que una acción está en proceso. Necesitan que en MainActivity.java se escriba
el código que determina su actuación.
 SearchView, Texture View, SurfaceView: insertan widgets para búsquedas, texturas y
superficies.
 Horizontal y Verticakl Divider
Inserta divisiones horizontales y verticales para separar objetos.

2. USO DEL CONSTRAINT LAYOUT CON OBJETOS


Como ya se ha dicho anteriormente, el Constraint Layout aparece por defecto al inicio de una
actividad en blanco, haciendo más fácil y flexible el posicionamiento de los objetos en la interface
gráfica de la aplicación.
Para ello, al insertar un objeto, aparecen unas herramientas nuevas que van a permitir la ubicación
deseada exacta sin tener que recurrir al modo texto de la interface o a los atributos de dicho objeto.

Figura-14. Herramientas para trabajar el Constraint de los objetos

10
Sistemas de Telefonía Fija y Móvil
I.E.S. “EL PALMERAL” ORIHUELA
CURSO 2022/23 Antonio Serna Ruiz

Una vez se inserta un objeto en el ConstraintLayout, aparecerán unas marcas laterales, así como
arriba y debajo, que pinchando sobre ellas y arrastrando hasta los márgenes o hasta otros objetos,
estaremos estableciendo las referencias para el posicionamiento relativo de dicho objeto. A partir
de ahí, podremos modificar su posicionamiento simplemente arrastrando con el ratón o bien desde
la herramienta que aparece a la derecha para los márgenes manuales.
Si tenemos activada la herramienta de conectado automático en la parte superior, al insertar el
objeto ya aparecen los constraint horizontales.
Si pulsamos la herramienta de posicionamiento fijo (Infer Constraints), estableceremos unas
referencias para el objeto que harán que ocupe una posición fija en la interface.
Si el constraint se establece entre dos objetos, la evolución en posición y tamaño de uno afectará al
otro, de la manera que se aprecia en la parte de debajo de la Figura-14.

3. COMENZANDO A TRABAJAR CON ELEMENTOS DE LA PALETA DE


HERRAMIENTAS Y SU CORRESPONDIENTE INSERCIÓN DE CÓDIGO
Los diferentes elementos de la paleta que se incorporan a la actividad deben ser identificados en sus
propiedades, como ya se ha visto mediante id, pero, además, también deben ser declarados en el
fichero principal java: MainActivity. java.
Para ver estas cuestiones con más detalle, vamos a apoyarnos en un ejemplo. Se plantea realizar una
aplicación donde tengamos la actividad principal en un ConstraintLayout con fondo azul claro, y
dentro de este haya un LinearLayout horizontal de color verde claro (#FF72F469), ajustado con
match_parent en ancho y un alto de 400dp, en el cual insertaremos:
 Un TextView: “Textos y Botones”. Un botón (Button): “Borrar Texto”. Un Plain Text, con
fondo blanco. A estos objetos habrá que establecerles los constraints correspondientes.
Se introducirá un texto en el objeto EditText (Plain Text) y que se borrará al pulsar el botón.

1- Se debe crear la interface, en la que aparecerán los layouts y objetos descritos.


2- En primer lugar, asegurarse de que el layout principal es un ConstraintLayout, para lo cual se
pasa a modo texto en el fichero activity_main.xml. Ahora agregar, pinchando y arrastrando
sobre la pantalla del simulador o sobre el árbol del esquema de la aplicación, un LinearLayout,
al que daremos un Layout_widht match_parent y un Layout_height de 400dp y situaremos en
la parte inferior.
3- Insertar los objetos arrastrándolos con el ratón hasta el árbol de componentes de la aplicación y
dentro del ConstraintLayout. En primer lugar, el TextView, seguido del Button y en último
lugar el Plain Text.
Los objetos irán ubicándose en una posición relativa de unos con los otros, ya que están en un
ConstraintLayout. Es muy importante ajustarlos mediante las líneas de constraint uno a uno
según se insertan, después pueden ser reubicados y dimensionados pinchando y arrastrando con
el ratón.
Se recomienda comenzar ajustándolos a los márgenes derecho e izquierdo del
ConstraintLayout y después el superior (relativo al elemento que tiene por encima) y el
inferior. Para facilitar la tarea de ubicar los objetos, se recomienda introducir los valores
manualmente.

11
Sistemas de Telefonía Fija y Móvil
I.E.S. “EL PALMERAL” ORIHUELA
CURSO 2022/23 Antonio Serna Ruiz

Arrastrar y soltar el nuevo


Layout en cualquiera de
ambos sitios

Figura-15. Vistas en el terminal de simulación

4- Cada uno de los objetos debe identificarse en sus propiedades (campo id): se aconseja para los
widgets tvnombre (TextView), para los botones btnombre (Button) y para los objetos de
introducción de texto etnombre (EditText). En nuestro caso se sugiere tvtextosybotones,
btborrar y etTexto1. Esto facilita bastante la identificación por nosotros o por otro programador
que pudiera retomar esta aplicación. No obstante, se pueden poner otros cualesquiera.
Asimismo, en el campo del nombre, habrá que modificar el genérico y poner otro
identificativo, por ejemplo, en el TextView “Textos y Botones” y en el botón “BORRAR”.

12
Sistemas de Telefonía Fija y Móvil
I.E.S. “EL PALMERAL” ORIHUELA
CURSO 2022/23 Antonio Serna Ruiz

5- Si se lanzase el programa al emulador, los objetos aparecerían en la interface, pero no sus


funcionalidades. Para ello, y una vez diseñada la interface, llega el momento de introducir algo
de código al declarar las variables de los objetos en el archivo
ManinActivity.java. Se debe abrir dicho archivo y, en primer
lugar, nos situaremos justo debajo de la clase pública, public
class MainActivity extends AppCompatActivity {}. Y se procederá
a declararlos mediante la fórmula:

private tipo objeto identificador;


private TextView tvtextosybotones;
private Button btborrar;
private EditText etTexto1;

Observaremos como se va completando el código con lo que


identificada la sentencia y es recomendable darle a la tecla
“enter”, así como a la vez se crean los import de las librerías
correspondientes, que aparecen en la parte superior de esta clase.

Figura-16. Vista en el emulador

6- A continuación, es necesario declarar los métodos para recuperar los objetos o realizar las
acciones que correspondan a cada objeto. Para ello habrá que escribir dentro del método de
creación de la actividad, protected void onCreate(Bundle savedInstanceState) {}. Debajo de lo
ya escrito se recurre a la siguiente fórmula para estas declaraciones:

identificador= (tipo objeto) findViewById(R.id.identificador);


btborrar= (Button) findViewById(R.id.btborrar);
etTexto1= (EditText) findViewById(R.id.etTexto1);

Se puede observar como cada declaración de un identificador de objeto llama a la clase R de java
que los contiene (archivo R.java).

7- Justo seguido, se debe crear una función que se encargue de recoger la acción del objeto
(evento), en este caso el botón, para lo cual se recurre a un Listerner (escuchador) según la
fórmula:

Identificador.setOnclickListener(new View.OnClickListener() {

btborrar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) { Justo en este punto se crea automáticamente
la función, en la que sólo completaremos las
etTexto1.setText(" "); comillas vacías, que indican que se
} devuelve una cadena vacía al EditText justo
al pulsar el botón.

13
Sistemas de Telefonía Fija y Móvil
I.E.S. “EL PALMERAL” ORIHUELA
CURSO 2022/23 Antonio Serna Ruiz

Lanzar un emulador y probar la aplicación. La Figura-17 muestra el código del archivo


MainActivity.java y el aspecto en el emulador del programa. Si se pulsa Ctrl+F11 se cambia la
orientación de la pantalla en el emulador.

Figura-17. Vista del código y del emulador corriendo la aplicación

Siguiendo con este ejemplo, podemos modificarlo para que existan dos Edit Text del tipo Number,
de forma que nos permita sumar dos cantidades introducidas en los mismos. Para sumar las
cantidades añadiremos un nuevo botón al que llamaremos “SUMAR”. Pasos a seguir:

a. En la Interface:
 Añadir dos nuevos Edit Text del tipo Number, a los que llamaremos e identificaremos
como “operando1” @+id/etoperando1 y “operando2” @+id/etoperando2.
 Añadir un nuevo botón con el nombre “SUMAR” y el identificador @+id/btsumar.

b. En el archivo MainActivity.java:
 Declarar las variables de los nuevos objetos, Edit Text y el Button, así como las
variables de tipo int para realizar la operación de sumar:

private EditText etoperando1;


private EditText etoperando2;
private Button btsumar;
private int suma,a,b;

14
Sistemas de Telefonía Fija y Móvil
I.E.S. “EL PALMERAL” ORIHUELA
CURSO 2022/23 Antonio Serna Ruiz

c. Referenciar los objetos para llamar a la clase R:


btsumrar= (Button) findViewById(R.id.btsumar);
etoperando1= (EditText) findViewById(R.id.etoperando1);
etoperando2= (EditText) findViewById(R.id.etoperando2);

d. Se debe crear un nuevo método que se encargue de recoger la acción del objeto (botón sumar),
para lo cual se recurre a un Listerner (escuchador):
btsumar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
a= Integer.parseInt(etoperando1.getText().toString());
b= Integer.parseInt(etoperando2.getText().toString());
suma=a+b; En este punto se crea automáticamente la
función, completaremos las asignaciones a
etText1.setText(“ ” + suma); las variables, pasando a entero en string,
} sumaremos y presentaremos en el Edit
Text inicial.

Podría incluirse un nuevo


botón para borrar los EditText
antes de una nueva operación

Figura-16.MainActivity.java una vez insertado el nuevo código

15
Sistemas de Telefonía Fija y Móvil
I.E.S. “EL PALMERAL” ORIHUELA
CURSO 2022/23 Antonio Serna Ruiz

4. CONEXIÓN DE UN TELÉFONO MÓVIL AL ORDENADOR PARA PODER


VER LAS APLICACIONES

Es posible que tengamos problemas con el emulador a la hora de arrancar y ver las aplicaciones,
bien porque no siempre se consigue o bien porque tarda mucho. Para evitar este contratiempo,
podemos conectar nuestro teléfono móvil Android al ordenador y seguir la ejecución de las
aplicaciones desde el terminal.

Los pasos para conectar y configurar nuestro teléfono móvil son los siguientes:
1. Recordar que en el SDK manager debe estar instalado el Google USB Driver y por supuesto
debemos tener instalados en nuestro ordenador los drivers del teléfono móvil para que este sea
reconocido. Muchos terminales vienen con un software para el mantenimiento del teléfono y
que, al instalarlo, también lo hace con los drivers. Para los terminales Sony es el PC
Companion, para los Samsung el Kies, etc.
2. En nuestro teléfono móvil habrá que activar la depuración USB y permitir los simuladores
(Ubicaciones falsas). Esto se suele localizar en Ajustes-Opciones del Desarrollador-
Depuración USB.
3. Una vez hechos estos dos pasos, sólo resta volver a compilar el programa y ahora aparecerá
una ventana donde se nos pregunta si deseamos utilizar el emulador o el teléfono móvil. Marcar
el teléfono y se ejecutará la aplicación en el mismo.

 Recordar que es importante que la API mínima con la que ha sido creada la
aplicación sea soportada por vuestro terminal.

5. FUNDAMENTOS PRÁCTICOS
1. Realizar una aplicación mediante Android Studio, a la que llamaremos Taxímetro, para
realizar una operación de cálculo mediante la introducción de los dos datos a multiplicar y la
presentación del resultado en un cuadro de texto al pulsar un botón. Para dar más vistosidad al
ejemplo plantearlo como la simulación del cálculo del precio a pagar en un taxi, es decir, se
introducirían los kilómetros recorridos, el precio por kilómetro y al pulsar aparecería el importe
a pagar (ver Figura-17).

2. Como mejora se propone que se inserte otro botón para borrar todo una vez realizado el cálculo
y previo a volver a calcular.

3. Esta propuesta se debe realizar de forma individual, de manera que tanto imagen como fondos
y disposición de los objetos en la interface debe ser diferente para cada uno de vosotros.

4. La aplicación se presentará instalada en el dispositivo móvil de cada alumno.

5. Se valorará la creatividad y originalidad.

16
Sistemas de Telefonía Fija y Móvil
I.E.S. “EL PALMERAL” ORIHUELA
CURSO 2022/23 Antonio Serna Ruiz

Figura-17. Aspecto orientativo que debe tener la aplicación de la práctica

BIBLIOGRAFÍA
El gran libro de Android. Ed. Marcombo. (Jesús Tomás Gironés)

www.jarroba.com
http://codigoprogramacion.com/java#.WrfL0uQh07M
http://www.sgoliver.net/blog/curso-de-programacion-android/indice-de-contenidos/
https://codelabs.developers.google.com/codelabs/constraint-layout/#3
http://www.androidcurso.com/index.php/recursos/32-unidad-2-diseno-de-la-interfaz-de-usuario-vistas-
y-layouts/881-uso-de-constraitlayout
https://www.youtube.com/watch?v=S7TwRIKqCu4
https://developer.android.com/guide/topics/ui/declaring-layout?hl=es-419

NOTAS
Legacy

 GridLayout: Son Layouts organizados a modo de cuadrícula donde no necesariamente debe


existir una disposición simétrica como ocurre en los TableLayout, sino que la cuadrícula se
va conformando a medida que se agregan los objetos. Están en Legacy.

 RelativeLayout: Son Layouts donde los diferentes objetos ocupan posiciones relativas los
unos respecto de los otros. Al aparecer el ConstraintLayout no tienen mucho sentido su uso,
así que los encontraremos en Legacy.
 Guideline: son Layouts donde los objetos seguirán su posicionamiento según una línea
horizontal o vertical.

17

También podría gustarte