Estructura en Android
Estructura de una aplicación Android
La estructura de una aplicación en Android está compuesta por un conjunto de archivos y directorios que se crean dentro de un directorio raíz. Este directorio raíz está identificado con el nombre introducido en la creación del proyecto. La estructura puede variar según el IDE o la versión utilizada del mismo, aunque siempre mantiene un conjunto de archivos comunes: el directorio src (source) que es el que contiene los archivos de desarrollo de la aplicación, el directorio build que contiene los archivos que se generan en la compilación y el directorios libs que contiene las librerías externas. El directorio src es en el cual se encuentran los archivos básicos del proyecto, generalmente se divide en tres partes o subdirectorios: manifests, java y res.
La imagen siguiente muestra todos los métodos y los estados (rectángulos con esquinas redondeadas y coloreados) por los que pasa una activity.
Ciclo de vida de un Activity
El IDE puede mostrar una estructura del proyecto distinta a la que muestra el gestor o explorador de archivos del sistema. Esta vista, más simplificada, optimiza la navegación entre los archivos durante el desarrollo.
Vista de un proyecto en Android Studio (versión 3.0)
Vista de un proyecto en un gestor de archivos (Nautilus)
MANIFEST
El manifest es un archivo xml que contiene información preconfigurada de la aplicación y que permite configurar las activities. La información indica la versión de la aplicación, la api mínima y máxima a la que está dirigida, el icono de la aplicación, el nombre del paquete,etc... Cada una de las activities debe encontrarse reflejada dentro de la etiqueta activity y una de ellas debe identificarse como la activity principal de la aplicación. A continuación un archivo manifest.xml básico compuesto de una sola activity
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="//schemas.android.com/apk/res/android"
package="xip.midominio.com.miaplicacion">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
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>
</application>
</manifest>
ACTIVITY
Una Activity o Actividad en Android representa cada una de las ventanas de la aplicación, configurada en el archivo manifest.xml y que consta de una parte gráfica y una parte lógica . La parte gráfica viene definida en código XML en el directorio de recursos y la parte lógica viene definida en código java.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="//schemas.android.com/apk/res/android"
xmlns:app="//schemas.android.com/apk/res-auto"
xmlns:tools="//schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="xip.midominio.com.miaplicacion.MainActivity">
</RelativeLayout>
MainActivity.java
En primeras versiones un activity heredaba de la clase Activity pero, a medida que Android ha ido evolucionando, creando nuevas versiones con nuevas funcionalidades, Android puede generar durante la creación del proyecto la herencia de otras clases para el mismo fin, como pueden ser FragmentActivity, AppCompatActivity,etc...
Es necesario destacar el método setContentView que se encarga de relacionar la parte gráfica (XML) de la activity.
package com.mipaquete.app.miproyecto;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
Ejemplo de relación de activities
Activity principal
Parte gráfica (activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="//schemas.android.com/apk/res/android"
xmlns:tools="//schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context = ".MainActivity">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/caja"
android:hint="nombre"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/boton"
android:text="Enviar"
/>
</LinearLayout>
Parte lógica (MainActivity.java)
package com.mipaquete.app.miproyecto;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity implements OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
caja = (EditText) findViewById(R.id.caja);
boton = (Button) findViewById(R.id.boton);
boton.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu){
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.boton:
texto = caja.getText().toString();
Intent intent = new Intent(getBaseContext(),Otra.class);
intent.putExtra("valor",texto);
startActivity(intent);
break;
default:
break;
}
}
Segunda Activity
Parte gráfica (otra_activity.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="//schemas.android.com/apk/res/android"
xmlns:tools="//schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/caja"
android:text="@string/hola_mundo"
/>
</LinearLayout>
Parte lógica (Otra.java)
package com.mipaquete.app.miproyecto;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class Otra extends AppCompatActivity implements OnClickListener {
String val;
TextView textview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.otra_activity);
textview = (TextView) findViewById(R.id.texto);
Bundle extras = getIntent().getExtras();
if(extras != null){
val = extras.getString("valor");
textview.setText(val);
}
}
}
Manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="//schemas.android.com/apk/res/android"
package="com.mipaquete.app.miproyecto">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name="com.mipaquete.app.miproyecto.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.mipaquete.app.miproyecto.Otra">
<intent-filter>
<action android:name="android.intent.action." />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
</manifest>
Para poder comentar es necesario iniciar sesión