Sobre las medidas trabajadas en programación


dp:Density-independent Pixels (píxeles de densidad independiente)
Esta unidad se basa en la densidad física de la pantalla. 

1 dp = 1   pixel,  mdpi    (160PPI). 
1 dp = 1.5 pixels, hdpi    (240PPI).
1 dp = 2   pixels, xhdpi   (320PPI).
1 dp = 3   pixels, xxhdpi  (480PPI).
1 dp = 4   pixels, xxxhdpi (640PPI). 
Es la más utilizada en distintos tipos de dispositivos, si tienen fuente (como un textview, button) usar "sp".

sp: Scale-independent Pixels (píxeles de escala independiente)
Lo mismo que el "dp" pero aplicado a los elementos que tengan fuente, como TextView, Button... porque la fuente puede ser combinada.


Sobre android studio y como definir una interfaz

notas:
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 


Sobre Kotlin y sus variables

programa utilizado:

IntelliJ IDEA 2019.3.4 (Community Edition)
Build #IC-193.6911.18, built on March 17, 2020
Runtime version: 11.0.6+8-b520.43 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Linux 5.3.0-42-generic
GC: ParNew, ConcurrentMarkSweep
Memory: 958M
Cores: 6
Registry:
Non-Bundled Plugins: Key Promoter X, aws.toolkit, com.intellij.plugins.watcher, org.jetbrains.kotlin, org.intellij.scala, com.jetbrains.edu, com.jetbrains.lightThemePreview, com.suusan2go.kotlin-fill-class, com.thvardhan.gradianto, kotlintest-plugin-intellij, tanvd.grazi, training

Características de Kotlin
Tipado estático, significa que la comprobación de la tipificación durante la compilación y no durante la ejecución.
la tipificación es la comprobación en tipo y rango en toda la programación
Inferencia de tipos, con Korlin no es necesario definir el tipo de variable si es claro que esta se define de una forma, por ejemplo...

fun main(args: Array<String>){
     var numero1:Int     var numero2=1
 }
  para numero1 se define de tipo entero (Int), para numero2 se entiende que es de tipo Int (entero), para las variables no sebe usar acentos

Como ver el tipo de una variable
println("${variable::class.simpleName}")
 con variable como el numbre de nuestra variable de estudio
 tambien se puede usar...

println("${num::class.qualifiedName}")
Éste nos entrega el nombre completo de la clase separado por un punto o entrega null si la clase es local o es un objeto anónimo literal.

Variables de tipo numérico

Byte
tamaño: 8bits
Mínimo:   -128
Máximo: +127

Short
tamaño: 16bits
Mínimo:  -32768
Máximo +32767

Double para decimales

tamaño: 64bits
Mínimo
Máximo

Int
tamaño: 32bits
Mínimo:   -2 147 483 648 (-231)
Máximo: +2 147 483 647 (231 - 1)definición de dos variables de tipo entero
fun main(args: Array<String>){
     var numero1:Int     var numero2=1}



Float para decimales

tamaño: 32bits

Long
tamaño: 64bits
Mínimo:   -9 223 372 036 854 775 808 (-263)
Máximo: +9 223 372 036 854 775 807 (263 - 1) el -1 es por el cero

Variable del tipo caracter

Variable del tipo cadena


Variable lógica

variable del tipo matriz se construye con arrayOf() o Array()

definir variable mutable  se usa var, de variable

definir variable inmutable se usa val, de valor

Variable del tipo entero sin signo (Unsigned integers)  en kotlin 1.3


UBye: un entero de 8 bits sin signo, varía de 0 a 255
UShort: un entero de 16 bits sin signo, varía de 0 a 65535
UInt: un entero de 32 bits sin signo, varía de 0 a 2 ^ 32 - 1
ULong: un entero de 64 bits sin signo, varía de 0 a 2^64 - 1

el uso de escape characters: 

\t: tabulador
\b: retroceso
\n: nueva línea
\r: salto de línea
\': comilla simple
\": comilla doble
\\: barra invertida
\$: símbolo del dólar



INDICE