01 Conceptos Generales
01 Conceptos Generales
01 Conceptos Generales
Carpeta /app/src/main/java
Carpeta /app/src/main/res/
subcarpetas:
/res/drawable/
/drawable (recursos independientes de la densidad)
/res/mipmap/
/mipmap-mdpi
/mipmap-hdpi
/mipmap-xhdpi
…
Contiene los ficheros de definición XML de las diferentes pantallas de
/layout (vertical)
/layout-land (horizontal)
/res/anim/
Contienen la definición de las animaciones utilizadas por la aplicación.
/res/animator/
Entre los recursos creados por defecto cabe destacar los layouts, en
nuestro caso sólo tendremos por ahora el llamado
“activity_main.xml”, que contienen la definición de la interfaz gráfica
de la pantalla principal de la aplicación. Si hacemos doble clic sobre
este fichero Android Studio nos mostrará esta interfaz en su editor
gráfico, y como podremos comprobar, en principio contiene tan sólo
una etiqueta de texto con el mensaje “Hello World!”.
Pulsando sobre las pestañas inferiores “Design” y “Text” podremos
alternar entre el editor gráfico (tipo arrastrar-y-soltar), mostrado en
la imagen anterior, y el editor XML que se muestra en la imagen
siguiente:
Fichero /app/src/main/AndroidManifest.xml
Fichero /app/build.gradle
Contiene información necesaria para la compilación del proyecto, por
ejemplo la versión del SDK de Android utilizada para compilar, la
mínima versión de Android que soportará la aplicación, referencias a
las librerías externas utilizadas, etc. Más adelante veremos también
más detalles de este fichero.
Carpeta /app/libs
Puede contener las librerías java externas (ficheros .jar) que utilice
nuestra aplicación. Normalmente no incluiremos directamente aquí
ninguna librería, sino que haremos referencia a ellas en el
fichero build.gradle descrito en el punto anterior, de forma que
entren en el proceso de compilación de nuestra aplicación. Veremos
algún ejemplo más adelante.
Carpeta /app/build/
Activity
View
Las vistas (view) son los componentes básicos con los que se
construye la interfaz gráfica de la aplicación, análogo por ejemplo a
los controles de Java o .NET. De inicio, Android pone a nuestra
disposición una gran cantidad de controles básicos, como cuadros de
texto, botones, listas desplegables o imágenes, aunque también
existe la posibilidad de extender la funcionalidad de estos controles
básicos o crear nuestros propios controles personalizados.
Service
Content Provider
Broadcast Receiver
Widget
Intent
<TextView android:id="@+id/lblNombre"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/nombre" />
<EditText android:id="@+id/txtNombre"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text" />
<Button android:id="@+id/btnAceptar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/aceptar" />
</LinearLayout>
<TextView android:id="@+id/lblNombre"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Escribe tu nombre:" />
Y la segunda alternativa, la utilizada en el ejemplo, consistiría en definir
primero una nueva cadena de texto en el fichero de
recursos /src/main/res/values/strings.xml, por ejemplo con identificador
“nombre” y valor “Escribe tu nombre:”.
<resources>
...
<string name="nombre">Escribe tu nombre:</string>
...
</resources>
<TextView android:id="@+id/lblNombre"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/nombre" />
package net.sgoliver.android.holausuario;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
Como ya vimos en un apartado anterior, las diferentes pantallas de
una aplicación Android se definen mediante objetos de tipo Activity.
Por tanto, lo primero que encontramos en nuestro fichero java es la
definición de una nueva clase MainActivity que extiende en este
caso de un tipo especial de Activity llamado AppCompatActivity,
que soporta entre otras cosas la utilización de la Action Bar en
nuestras aplicaciones (la action bar es la barra de título y menú
superior que se utiliza en la mayoría de aplicaciones Android). El
único método que modificaremos por ahora de esta clase será el
método onCreate(), llamado cuando se crea por primera vez la
actividad. En este método lo único que encontramos en principio,
además de la llamada a su implementación en la clase padre, es la
llamada al método setContentView(R.layout.activity_main). Con
esta llamada estaremos indicando a Android que debe establecer
como interfaz gráfica de esta actividad la definida en el
recurso R.layout.activity_main, que no es más que la que hemos
especificado en el fichero /src/main/res/layout/activity_main.xml.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/lytContenedorSaludo"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView android:id="@+id/txtSaludo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="" />
</LinearLayout>
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_saludo);
}
}
package net.sgoliver.android.holausuario;
//..
import android.widget.Button;
import android.widget.EditText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
package net.sgoliver.android.holausuario;
//...
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Si quisiéramos tan sólo mostrar una nueva actividad ya tan sólo nos
quedaría llamar a startActivity() pasándole como parámetro el
intent creado. Pero en nuestro ejemplo queremos también pasarle
cierta información a la actividad llamada, concretamente el nombre
que introduzca el usuario en el cuadro de texto de la pantalla
principal. Para hacer esto creamos un objeto Bundle, que puede
contener una lista de pares clave-valor con toda la información a
pasar entre actividades. En nuestro caso sólo añadimos un dato de
tipo String mediante el método putString(clave, valor). Como
clave para nuestro dato yo he elegido el literal “NOMBRE” aunque
podéis utilizar cualquier otro literal descriptivo. Por su parte, el valor
de esta clave lo obtenemos consultando el contenido del cuadro de
texto de la actividad principal, lo que podemos conseguir llamando a
su métodogetText() y convirtiendo este contenido a texto
mediante toString() (más adelante en el curso veremos por qué es
necesaria esta conversión).
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_saludo);
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.sgoliver.android.holausuario">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SaludoActivity"></activity>
</application>
</manifest>
Podemos ver como para cada actividad se indica entre otras cosas el
nombre de su clase java asociada como valor del
atributo android:name, más adelante veremos qué opciones
adicionales podemos especificar.
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "net.sgoliver.android.holausuario"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.3.0'
}
Para poder probar aplicaciones Android en nuestro PC, sin tener que
recurrir a un dispositivo físico, tenemos que definir lo que se
denominan AVD (Android Virtual Device). Para crear un AVD
seleccionaremos el menú Tools / Android / AVD Manager. Si es la
primera vez que accedemos a esta herramienta veremos la pantalla
siguiente: