En esta unidad veremos instrucciones trabajar los LAYOUT
Diseño lineal (LinearLayout)
Es un grupo de vista alinea los campos secundarios en una sola
dirección de manera vertical o bien horizontal.
Se especifica la dirección de LinearLayout con el atributo
orientation.
Es uno de los diseños mas simples establece los
componentes visuales y mas empleados estableciendo los elementos o
componentes visuales uno junto a otro, de forma vertical o bien
horizontal.
proyecto0017
En este proyecto solo revisaremos el diseño de LinearLayout la
parte lógica ya se ha visto anteriormente, estos proyectos te
ayudaran a mejorar el aspecto de tus apps.
Para comenzar ubiquemos en el panel los layout.

Tenemos en este caso 2 LinearLayouts Horizontal y Vertical.
Veamos el primero horizontal, esto significa que los items se
acomodan en forma horizontal ( por columnas ), veamos un ejemplo:
Tomamos la primer opción LinearLayout
(horizontal) y la arrastramos al ´area de trabajo del móvil, y ahí
veremos una linea con cuatro controles de ajuste y este lo
reducimos a la mitad del ´area, para ajustarlo debemos seleccionar
un borde, y moverlo hacia arriba (no uses los puntos de control,
estos son para ajustar distancias.

Ahora agregamos 3 botones en esta ´area, arrastr´andolos vea el
efecto que se acomodan los items de los botones en forma
horizontal

Se puede ajustar las distancia del linearlayout, usando
layout_width con wrap_content,

y con layout_height usamos wrap_content

Ahora usaremos LinearLayout (vertical)

De igual forma agregamos 3 botones, arrastr´andolos a esta ´area

y de igual manera ajustamos con layout_width ajustamos con
wrap_content, y layout_height, y warp_content

y el resultado queda así:
Puede realizar la compilación del proyecto, ejecución y usarlo
en el celular a manera de prueba de vista.
proyecto0017a
Diseñaremos una pantalla con los elementos del ejercicio
anterior proyecto0017, comenzamos con el layout LinearLayout
(vertical).
Reducimos el layout, a la mitad de la distancia, y ajustamos las
distancias en lo extremos con BluePrint:

Agregamos los elementos text: e_mail, Password y un botón.


Reducimos el ´area del layout, y la ajustamos al centro de la
parte del celular.


Nos dirigimos al archivo string.xml, y lo modificamos de
la siguiente forma:

<resources>
<string
name="app_name">proyecto0017a</string>
<string name="txt_mail">Correo
Electronico</string>
<string
name="txt_password">Contraseña</string>
<string
name="boton">ingresar</string>
</resources>
Asignamos en el campo hint :



en el layout realizamos el ajuste de layout_width, usando el
match_constraint para que no ocupe toda la ´area de la app.


Podemos ajustar al centro la aplicación

Recordemos que solo es el diseño la parte lógica puedes
realizarla tu, como practica.
proyecto0018
Diseño de Tabla (TableLayout)
Permite agrupar los elementos (Items) en columnas y filas,
tiene un conjunto de componentes del tipo TableRow, es el que
agrupa componentes visuales por cada fila.
Aunque el nombre sugiere una tabla para acomodar datos, en
realidad es una especialización de LinearLayout vertical, con un
comportamiento especializado, hay una vista especifica que solo se
puede utilizar en TableLayout y es la que aporta la funcionalidad
necesaria para crear la tabla es decir TableRow.
TableRow es, a su vez otra especialización de
LinearLayout, esta a su vez un LinearLayout horizontal. así que
resulta evidente que, lo que nos muestra como un estructura de
tabla, es en realidad un grupo de LinearLayout horizontales dentro
de LinearLayout vertical.
Iniciamos como lo hemos realizado y ya en proyectos anteriores y
estando que el diseño propiamente.
iniciamos con Layouts > TableLayout se genera un ´area
limitado por una linea de color verde que es la parte principal
del TableLayout

asignamos distancias

Este componente en el esta un grupo de elementos dentro de el,
haciendo un clic en el indicador
y se vera de la siguiente forma

Agregaremos 2 mas TableRow arrastrando el componente y dejarlo
caer dentro de TableLayout para agregar mas elementos:

quedando de la siguiente forma:

Agregaremos botones a cada fila (son 6 filas) inicialmente
arrastramos de los controles de button a cada TableRow:

Quedando de la siguiente forma un botón por cada
renglón, los siguientes botones se pueden "arrastrar" al lado
derecho de cada botón inicial, o bien de la misma forma como se
realizo.

realizaremos un ajuste del area, pasando estos elementos en la
parte inferior reduciendo el ´area del TableLayout
Agregamos mas botones siendo 3 por linea excepto al final,
"arrastramos" el control del botón al lado derecho de cada linea
seleccionando el ultimo botón y seleccionamos en
el menú todas las propiedades y localizamos la propiedad
layout_span y establecemos el valor de 3 con ello ocupara 3
posiciones de los botones superiores.

Distribuiremos los botones de forma equitativa,
para ocupar el ancho de la pantalla, para ello seleccionamos los
tres botones de la parte inferior, de la siguiente forma hacemos
clic en el lado izquierdo, y para realizar la selección de los
otros botones presionamos la tecla SHIFT y hacemos clic en
cada botón

Al tenerlos seleccionados usamos el control
(Distribute Weigths Evenly) que localizamos en esta posición
al aplicarlo 
realizamos lo mismo para los dem´as botones, para el ultimo botón
retiramos la propiedad (esto es para que se pueda observar el
comportamiento de este elemento)
cuando es solo un botón que se selacciona la
herramienta (Distribute Weigths Evenly) no se muestra, entonces
para ampliar este botón a lo ancho usaremos la propiedad
layout_weight y lo establecemos a 3


Asignaremos el texto a cada uno de estos botones usaremos como
en los casos anteriores el archivo string.xml que es la siguiente
secuencia
<resources>
<string
name="app_name">proyecto0018</string>
<string name="uno">1</string>
<string name="dos">2</string>
<string name="tres">3</string>
<string name="cuatro">4</string>
<string name="cinco">5</string>
<string name="seis">6</string>
<string name="siete">7</string>
<string name="ocho">8</string>
<string name="nueve">9</string>
<string name="cero">0</string>
<string name="Sumar">+</string>
<string name="Restar">-</string>
<string
name="Multiplicar">*</string>
<string name="Division">/</string>
<string name="Resultado">=</string>
<string name="RestaurarValores">Restaurar
Valores</string>
<string name="TextView">0</string>
</resources>
Asignamos a cada botón los valores de strings

El resultado puede verse de esta manera

Ahora agregaremos la sección para mostrar el resultado
(DISPLAY) usando TextView.

y ajustamos el tamaño en atributos
y se realiza el ajuste las distancias arriba y a
la izquierda
Es un ejemplo de diseño así que las herramientas les permiten
realizar
proyecto0019
Control FrameLayout (diseño de marco)
Es el mas simple de todos los Layouts en
Android, no realiza ninguna distribución de las vistas,
simplemente las coloca unas encima de otras. Esto le evita tener
que relacionar los tamaños de unas vistas como las dem´as, por lo
que se ahorra recorridos del ´arbol de vistas, tardando menos en
mostrar su contenido.
Por ello, suele utilizarse para mostrar un único control en su
interior, a modo de contenedor sencillo para un solo elemento
sustituible, por ejemplo una imagen.
para iniciar usamos el control Layout y FrameLayout
podemos observar que este control ocupa toda el
´area del activity
solo podemos agregar un control
Realizamos el ajuste de las distancias

Usemos el ImageView de Widgets y la arrastramos al ´area de
FrameLayout
que nos llevara a la siguiente ventana, donde
seleccionamos Project y ic_launcher

a lo nos presentara de esta forma:

Agregamos un botón, como se puede esperar este botón quedara por
encima de la imagen seleccionada, y esa es la intensión de esto

Ahora haremos un proceso donde el botón
seleccionarlo desaparezca y deje visible a la imagen del fondo,
para ello necesitamos primero cambiar los atributos de la imagen,
seleccionemos la imagen y pasaremos a modificar sus
atributos.
buscamos el atributo visibility y seleccionamos
invisible

con lo cual quedaría de esta forma:

necesitamos modificar el archivo strings.xml para crear la
relación con el botón
<resources>
<string
name="app_name">proyecto0019</string>
<string name="boton">Ocultar</string>
</resources>
Regresamos a la vista diseño y seleccionamos nuestro botón


Modifiquemos la parte lógica de la activity (MainActivity.java)
package com.example.dell.proyecto0019;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends AppCompatActivity {
//creamos objeto a los
items que agregamos a la activity
private ImageView iv1;
private Button boton1;
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv1
=(ImageView)findViewById(R.id.imageView);
boton1
=(Button)findViewById(R.id.button);
}
//
creaemos un metodo para hacer visibles o invisibles los elementos
public void Ocultar(View view){
boton1.setVisibility(View.INVISIBLE); // como necesitamos que nuestro botón se oculte
usamos Invisible
iv1.setVisibility(View.VISIBLE); //esto significa que la imagen se volver´a visible
cambiando las propiedades de invisible a visible
}
}
Asignamos el método
a la propiedad OnClic

Ejecutamos la aplicación en nuestro celular
proyecto0020
Control ScrollView (Vista de desplazamiento).
Permite colocar una cantidad de controles y elementos visuales,
que superen el campo de visión del dispositivo, de esta
manera el usuario podr´a desplazar con el dedo la interfaz de la
aplicación creada.
Haremos una aplicación con im´agenes de frutas y su nombre en
español, y en ingles (u otro idioma) los nombres de las im´agenes
deber´an ser de forma normal, no deber´an de tener ñ, o caracteres
especiales ya que no ser´an agregadas en Android.
Las im´agenes las puedes descargar desde Internet. (recuerda que
deben de ser los nombres en minúsculas y sin caractres especiales
(ñ)
Primero deberemos de tener las im´agenes de las frutas en algún
directorio que ser´an las que pasan a la activity:
Creamos nuestro proyecto en Android Studio.
lo primero que haremos es incluir la im´agenes de las frutas,
para ello pasamos al directorio donde encuentran estas.
(recordemos los tamaños para las im´agenes usadas en nuestra
activity deber´an ser pequeñas para poder acomodarlas bien usemos
40 x 40 pixeles)
seleccionamos todas las im´agenes y las copiamos, y pasamos a
nuestra activity, y desplegamos la carpeta apps > res >
drawable y sobre la carpeta hacemos clic derecho e indicamos pegar
(paste) nos presentara una ventana que confirma que se desea pegar
el directorio en esta parte y hacemos clic en OK, y despues nos
solicitara el directorio en la app para registrarla ahi y solo
hacemos clic en el botón OK. en el siguiente enlace se muestra el
procedimiento completo.
Procedemos a nuestro diseño y realizamos la selección de
Containers y ScrollView.
realizamos el ajuste de distancias dejando en de
la parte superior sin valor.
en la parte superior solo la dejaremos al limite
de la activity, esto es para que abarque la mayor cantidad de
espacio de la activity.
veamos que al crear el ScrollView dentro de el se forma un
LinearLayout y es para ir agregando los elementos de im´agenes con
ImageButton, y este control sera "arrastrado" a LinearLayout
(figura inferior)

donde seleccionaremos alguna de las im´agenes que se copiaron en
los pasos anteriores, al soltar el control dentro de este se vera
lo siguiente:
ahí seleccionamos Proyect:
donde comenzaremos a seleccionar algunas de la
im´agenes de frutas, podemos comenzar con bananas, pero tu puedes
seleccionar el orden que tu quieras, y para cada imagen usaremos
el ID que se relaciona con la fruta

Pasamos a los atributos de esta imagen y modificamos el atributo
background donde seleccionaremos un color que contraste con las
im´agenes, yo lo hare con el color verde de la siguiente forma
backgroud > (elemento con ...) Color > android >
holo_green_ligth


y es así como se vera el efecto, regresamos a los atributos
b´asicos y veamos que tenemos un cuadro llamado contentDescription,
ya que esta faltante para la descripcion del contenedor

para corregir esto usaremos el archivo string.xml para agregar
el contenedo, agregamos una etiqueta llamada descripcion:
<resources>
<string
name="app_name">proyecto0020</string>
<string
name="descripcion">Descripcion</string>
</resources>
regresamos a nuestra activity y asignamos el contenedor

esta referencia sera utilizada para todos los elementos de
ImageButton
repetimos el procedimiento para el siguiente elemento (en esta
caso fruta las cerezas)


de nueva cuenta usamos los atributos de background y ahora
usamos el que es transparente: background > color > android
> trasparent

el resultado de esto se ve asi:

y realizamos el proceso con cada una de las im´agenes, alternando
entre el verde y el transparente al final veremos de esta forma

seguimos con la parte lógica MainActivity.java
package com.example.dell.proyecto0020;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void Seleccion(View view){
switch (view.getId()){
case R.id.fresas:
Toast.makeText(this,"fresas
Strawberry",Toast.LENGTH_SHORT).show();
break;
case R.id.bananas:
Toast.makeText(this,"bananas
Bananas",Toast.LENGTH_SHORT).show();
break;
case R.id.cerezas:
Toast.makeText(this,"cerezas
Cherries",Toast.LENGTH_SHORT).show();
break;
case R.id.franbuesas:
Toast.makeText(this,"franbuesas
Raspberries",Toast.LENGTH_SHORT).show();
break;
case R.id.kiwi:
Toast.makeText(this,"kiwi Kiwis",Toast.LENGTH_SHORT).show();
break;
case R.id.mangos:
Toast.makeText(this,"mango mango",Toast.LENGTH_SHORT).show();
break;
case R.id.manzanas:
Toast.makeText(this,"manzanas
Apples",Toast.LENGTH_SHORT).show();
break;
case R.id.melon:
Toast.makeText(this,"melon
Cantaloupe",Toast.LENGTH_SHORT).show();
break;
case R.id.naranjas:
Toast.makeText(this,"maranjas
Oranges",Toast.LENGTH_SHORT).show();
break;
case R.id.peras:
Toast.makeText(this,"peras Pears",Toast.LENGTH_SHORT).show();
break;
case R.id.pinas:
Toast.makeText(this,"piñas Pineapples",Toast.LENGTH_SHORT).show();
break;
case R.id.sandia:
Toast.makeText(this,"Sandia
Watermelon",Toast.LENGTH_SHORT).show();
break;
case R.id.uvas:
Toast.makeText(this,"Uvas Grapes",Toast.LENGTH_SHORT).show();
break;
case R.id.zarzamoras:
Toast.makeText(this,"zarzamoras
Blackberries",Toast.LENGTH_SHORT).show();
break;
}
}
}
cuando termine debemos asociar todos los botones de imagen
al evento Seleccion (el nombre de la instrucción Switch)
verifique el resultado de esta activity
modificar el proyecto0020
Cambiaremos el color e icono de la aplicación.
Los iconos que se han generado durante la ejecución en
Android han sido como de este estilo 
para realizar el cambio requerimos previamente tener una imagen
que representara el icono la condición es que la imagen sea de
tipo png y el nombre del archivo no contenga espacios para esta
aplicación usaremos esta imagen
pero pueden usar cualquier otra que sea de tipo .png y el tamaño
del archivo en este caso no es relevante.
Un elemento importante para este caso necesitaremos utilizar
algunos de lo siguientes programas de edición de texto, Notepad ++
o Sublime se recomienda usar el Notepad++ del sitio https://notepad-plus-plus.org
descarguen e instale este programa que sea el adecuado
para su sistema es decir x32 o x64 antes de proseguir.
Cambiemos el icono de la aplicación y el icono de la barra
superior, teniendo la imagen preparada usamos lo siguiente: app
> New > Image Asset

lo que nos presentara lo siguiente y en primer termino esta
Launcher Icons (Adaptative and Legacy) que corresponden los
diseños que est´an del lado derecho
en el caso de Name se recomienda que se
queda igual, esto es porque se hace referencia a un evento para
andriod y es conveniente dejarlo así (ic_launcher) en la opción
Asset Type esta seleccionado Image donde observamos los diferentes
diseños para ajustar la imagen y como se puede apreciar son los
iconos que android studio coloca para las aplicaciones que hemos
creado :
para Clip Art

aquí tenemos mas iconos a usar aunque son simples

también tenemos la opción para agregar texto




podemos ver que hay un botón llamado trim (recortar) en la
imagen superior esta en No si aplicamos en Yes se ve de esta
forma:

Ahora usamos el separador Background Layer cambiaremos de color


En legacy podemos seleccionar varios formas como Circle a Square


podemos observar como cambia la forma del icono, usando las 3
partes podemos adaptar el icono que deseamos para la aplicación,
hacemos clic en Next y finish, podemos ejecutarla y al cerrarla se
vera que el icono de la figura de andriod ha cambiado por la
imagen que hemos usado (frutas) revise el icono en su Smartphone,
tendr´a la imagen y el nombre debajo proyecto0020.
Agregaremos la imagen a la barra superior (Action Bar) de la
aplicación al lado izquierdo del nombre de la app. Para ello
debemos modificar la parte lógica del la aplicación usando lo
siguiente.
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//
Colocar el icono en action bar
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setIcon(R.mipmap.ic_launcher);
}
ic_launcher es el nombre que se aplicaba al comienzo de
asignación de la imagen como icono y debemos recordar que no
debemos cambiar este nombre porque lo usamos en esta sección.

con esto el icono se presentara al lado izquierdo del action bar
cambiaremos el color del Action Bar para ello requerimos usar el
siguiente muestrario de colores que esta disponible en la pagina:
www.materialpalette.com debemos seleccionar 2 colores uno es para
el action bar (primer color seleccionado), el segundo es para el
color de los componentes, se han seleccionado el color rojo y
purpura cuando se tengan los dos colores se mostrara del lado
derecho el efecto completo de la combinación.

Pero como estamos usando color verde usaremos la siguiente
combinación

y realizamos un clic en DOWNLOAD donde seleccionamos el código
para XML

al hacer clic ahí nos mostrara el cuadro de dialogo que nos pide
que descarguemos esta archivo (guardar) y este esta con extensión
XML, debemos ubicar el directorio de descarga para poder acceder a
este archivo con el Notepad ++ porque tomaremos parte del código
generado para incluir los colores en la app.


y este archivo con Notepad ++

que vemos de esta forma, no se puede ver correctamente en
block de notas es preferible abrirlo de esta forma, ya que no se
puede apreciar correctamente en otros editores

seleccionamos todos los códigos de colores que se generaron
regresamos a andriod studio en app >res > values >
colors.xml
donde realizamos el proceso de pegar el código que se genero
anteriormente:
debemos hacer algunos ajustes, para ello
copiamos los nombres (en rojo) en las secciones que se copiaron
desde los colores generados en la pagina
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
se copian en:
<color name="primary">#8BC34A</color>
<color name="primary_dark">#689F38</color>
<color
name="primary_light">#DCEDC8</color>
<color name="accent">#FFC107</color>
<color
name="primary_text">#212121</color>
<color
name="secondary_text">#757575</color>
<color name="icons">#212121</color>
<color
name="divider">#BDBDBD</color>
y queda de la siguiente forma:
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
<color name="colorPrimary">#8BC34A</color>
<color name="colorPrimaryDark">#689F38</color>
<color
name="primary_light">#DCEDC8</color>
<color name="colorAccent">#FFC107</color>
<color
name="primary_text">#212121</color>
<color
name="secondary_text">#757575</color>
<color name="icons">#212121</color>
<color
name="divider">#BDBDBD</color>
Borramos la parte superior y los que est´an sin modificar:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color
name="colorPrimary">#8BC34A</color>
<color
name="colorPrimaryDark">#689F38</color>
<color
name="colorAccent">#FFC107</color>
</resources>
Al compilar este proyecto veremos los cambios en la app
Como practica realiza este ultimo procedimiento para alguna de
las app que que hemos realizado
REFERENCIAS
Proyecto0017 y Proyecto0017a
https://developer.android.com/reference/android/widget/LinearLayout
https://stuff.mit.edu/afs/sipb/project/android/docs/reference/android/widget/LinearLayout.LayoutParams.html
Proyecto0018
https://developer.android.com/guide/topics/ui/layout/grid
https://examples.javacodegeeks.com/android/core/ui/tablelayout/android-tablelayout-example/
Proyecto0019
https://abhiandroid.com/ui/framelayout
https://www.tutorialspoint.com/android/android_frame_layout.htm
Proyecto0020
https://stackoverflow.com/questions/6674341/how-to-use-scrollview-in-android
https://developer.android.com/reference/android/widget/ScrollView
https://www.viralandroid.com/2015/11/android-scrollview-example.html