Los id se utilizan para que la clase R pueda revisar y encontrar cada elemento, ej: si tenemos un elemento, un TextView cuyo id se definió como...
android:id="@+id/tvMainTitle"el id es tvMainTitle, este id puede ser referenciado mediante...
R.id.tvMainTitle
de esta forma se puede hacer uso de sus propiedades...
Para acomodar el código de forma rápida en Windows o Linux meciante el atajo Ctrl+Alt+L, si no anda en la parte superior code > Reformat Code
Organización Lineal (LinearLayout)
orientation="vertical" de arriba hacia abajo
orientation="horizontal" de izquierda a derecha
dentro de un LinearLayout puede haber otro que tenga otra orientación
<?xml version="1.0" encoding="utf-8"?>
<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:orientation="vertical"
android:layout_height="match_parent"> <TextView
android:id="@+id/tvMainTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Hola Mundo!"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher_background"/>
<LinearLayout
android:layout_width="match_parent"
android:orientation="horizontal"
android:gravity="center"
android:layout_height="wrap_content">
<ImageView
android:layout_width="120dp"
android:layout_height="120dp"
android:src="@drawable/ic_filter_1_black_24dp"/>
<ImageView
android:layout_width="120dp"
android:layout_height="120dp"
android:src="@drawable/ic_filter_2_black_24dp"/>
<ImageView
android:layout_width="120dp"
android:layout_height="120dp"
android:src="@drawable/ic_filter_3_black_24dp"/>
</LinearLayout>
</LinearLayout>
Como podemos ver el "hola mundo" y el cuadrado verde están dentro del primer LinearLayout y los Vector Assets con los números 1, 2 y 3 están el el segundo LinearLayout con una orientación horizontal, en necesario poner su orientación.
Organizacion Relativa(RelativeLayout)
los elementos se organizan dependiendo de otros elementos
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
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:orientation="vertical"> <ImageView
android:layout_width="240dp"
android:layout_height="200dp"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:src="@drawable/rojo" /> <ImageView
android:id="@+id/ivMainVerde"
android:layout_width="150dp"
android:layout_height="370dp"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:src="@drawable/verde" /> <ImageView
android:layout_width="250dp"
android:layout_height="130dp"
android:layout_below="@+id/ivMainVerde"
android:src="@drawable/azul" /> <ImageView
android:layout_width="130dp"
android:layout_height="130dp"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:src="@drawable/rosado" />
</RelativeLayout>
Como se puede ver los tags de align definen el lugar que les corresponde a los elementos, en el caso del azul lo hace con respecto al verde mediante el id que éste debe poseer, los alignParent son con respecto a la vista, los que no, con respecto a otro elemento.
FrameLayout
cuando es requerido que la aplicación no ocupe toda la pantalla, o que en un cierto lugar aparezca una imagen, es decir que crecerá tanto como uno quiera.
Resulta muy versátil, porque permite poner vistas de forma dinámica así podemos reservar una vista para que entre y salga constantemente, también permite poner una imagen sobre otra sin problemas, es recomendable que tenga un solo hijo.
Layouts externos: ConstraintLayout






Código ejecutado
ALTER TABLE `lista de precios`
MODIFY `lista de precios`.`PRECIO CON IVA` DECIMAL(13,2),
MODIFY `lista de precios`.`FECHA ULTIMA ACTUALIZACIÓN` DATE,
MODIFY `lista de precios`.UNIDAD INT(3);
#1) Normalizar la tabla, hay redundancia en el campo Marca y Categoría
#crear tablas para las marcas y las categorias
CREATE TABLE IF NOT EXISTS tmarca (
SELECT DISTINCT Marca
FROM `lista de precios`);
ALTER TABLE tmarca ADD COLUMN IdMarca INT PRIMARY KEY auto_increment FIRST;
CREATE TABLE IF NOT EXISTS tcategoria (
SELECT DISTINCT CATEGORÍA
FROM `lista de precios`);
ALTER TABLE tcategoria
ADD COLUMN IdCategoria INT PRIMARY KEY auto_increment FIRST;
UPDATE `lista de precios` INNER JOIN tcategoria
SET `lista de precios`.`CATEGORÍA`=tcategoria.IdCategoria
WHERE `lista de precios`.`CATEGORÍA`=tcategoria.`CATEGORÍA`;
UPDATE `lista de precios` INNER JOIN tmarca
SET `lista de precios`.Marca=tmarca.IdMarca
WHERE `lista de precios`.Marca=tmarca.Marca;
#2) Agregar el campo `Precio de Venta` y calcularlo según precio de costo por un 45% (precio_de_venta=precio_de_costo*1,45)
ALTER TABLE `lista de precios`
ADD COLUMN `Precio de Venta` DECIMAL(13,2);
UPDATE `lista de precios`
SET `Precio de Venta`=`PRECIO CON IVA`*1.45;
#3) Generar el código para saber la cantidad de productos por tipo de producto.
SELECT COUNT(DISTINCT `CATEGORÍA`)
FROM `lista de precios`;
#4) Generar el código para saber la cantidad de productos por tipo de producto y marca.
SELECT COUNT(DISTINCT `CATEGORÍA`)
FROM `lista de precios`;
SELECT COUNT(DISTINCT Marca)
FROM `lista de precios`;
#5) Generar el código para saber la cantidad de productos con un precio de venta menor a cien pesos.
SELECT COUNT(`CÓDIGO`)
FROM `lista de precios`
WHERE `Precio de Venta` BETWEEN 1 AND 100;