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

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="//schemas.android.com/apk/res/android"
  3. package="xip.midominio.com.miaplicacion">
  4. <application
  5. android:allowBackup="true"
  6. android:icon="@mipmap/ic_launcher"
  7. android:label="@string/app_name"
  8. android:roundIcon="@mipmap/ic_launcher_round"
  9. android:supportsRtl="true"
  10. android:theme="@style/AppTheme">
  11. <activity android:name=".MainActivity">
  12. <intent-filter>
  13. <action android:name="android.intent.action.MAIN" />
  14. <category android:name="android.intent.category.LAUNCHER" />
  15. </intent-filter>
  16. </activity>
  17. </application>
  18. </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

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="//schemas.android.com/apk/res/android"
  3. xmlns:app="//schemas.android.com/apk/res-auto"
  4. xmlns:tools="//schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. tools:context="xip.midominio.com.miaplicacion.MainActivity">
  8. </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.

  1. package com.mipaquete.app.miproyecto;
  2. import android.support.v7.app.AppCompatActivity;
  3. import android.os.Bundle;
  4. public class MainActivity extends AppCompatActivity {
  5. @Override
  6. protected void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. setContentView(R.layout.activity_main);
  9. }
  10. }

Ejemplo de relación de activities

Activity principal

Parte gráfica (activity_main.xml)

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="//schemas.android.com/apk/res/android"
  3. xmlns:tools="//schemas.android.com/tools"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:orientation="vertical"
  7. tools:context = ".MainActivity">
  8. <EditText
  9. android:layout_width="match_parent"
  10. android:layout_height="wrap_content"
  11. android:id="@+id/caja"
  12. android:hint="nombre"
  13. />
  14. <Button
  15. android:layout_width="wrap_content"
  16. android:layout_height="wrap_content"
  17. android:id="@+id/boton"
  18. android:text="Enviar"
  19. />
  20. </LinearLayout>

Parte lógica (MainActivity.java)

  1. package com.mipaquete.app.miproyecto;
  2. import android.support.v7.app.AppCompatActivity;
  3. import android.os.Bundle;
  4. public class MainActivity extends AppCompatActivity implements OnClickListener {
  5. @Override
  6. protected void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. setContentView(R.layout.activity_main);
  9. caja = (EditText) findViewById(R.id.caja);
  10. boton = (Button) findViewById(R.id.boton);
  11. boton.setOnClickListener(this);
  12. }
  13. @Override
  14. public boolean onCreateOptionsMenu(Menu menu){
  15. getMenuInflater().inflate(R.menu.main,menu);
  16. return true;
  17. }
  18. @Override
  19. public void onClick(View v) {
  20. switch(v.getId()){
  21. case R.id.boton:
  22. texto = caja.getText().toString();
  23. Intent intent = new Intent(getBaseContext(),Otra.class);
  24. intent.putExtra("valor",texto);
  25. startActivity(intent);
  26. break;
  27. default:
  28. break;
  29. }
  30. }

Segunda Activity

Parte gráfica (otra_activity.xml)

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="//schemas.android.com/apk/res/android"
  3. xmlns:tools="//schemas.android.com/tools"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:orientation="vertical">
  7. <TextView
  8. android:layout_width="match_parent"
  9. android:layout_height="wrap_content"
  10. android:id="@+id/caja"
  11. android:text="@string/hola_mundo"
  12. />
  13. </LinearLayout>

Parte lógica (Otra.java)

  1. package com.mipaquete.app.miproyecto;
  2. import android.support.v7.app.AppCompatActivity;
  3. import android.os.Bundle;
  4. public class Otra extends AppCompatActivity implements OnClickListener {
  5. String val;
  6. TextView textview;
  7. @Override
  8. protected void onCreate(Bundle savedInstanceState) {
  9. super.onCreate(savedInstanceState);
  10. setContentView(R.layout.otra_activity);
  11. textview = (TextView) findViewById(R.id.texto);
  12. Bundle extras = getIntent().getExtras();
  13. if(extras != null){
  14. val = extras.getString("valor");
  15. textview.setText(val);
  16. }
  17. }
  18. }

Manifest.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="//schemas.android.com/apk/res/android"
  3. package="com.mipaquete.app.miproyecto">
  4. <application
  5. android:allowBackup="true"
  6. android:icon="@mipmap/ic_launcher"
  7. android:label="@string/app_name"
  8. android:roundIcon="@mipmap/ic_launcher_round"
  9. android:supportsRtl="true"
  10. android:theme="@style/AppTheme">
  11. <activity android:name="com.mipaquete.app.miproyecto.MainActivity">
  12. <intent-filter>
  13. <action android:name="android.intent.action.MAIN" />
  14. <category android:name="android.intent.category.LAUNCHER" />
  15. </intent-filter>
  16. </activity>
  17. <activity android:name="com.mipaquete.app.miproyecto.Otra">
  18. <intent-filter>
  19. <action android:name="android.intent.action." />
  20. <category android:name="android.intent.category.DEFAULT" />
  21. </intent-filter>
  22. </activity>
  23. </application>
  24. </manifest>


Comentarios: 0

Para poder comentar es necesario iniciar sesión



Este dominio utiliza cookies de terceros para crear estadísticas y publicidad personalizada. Si continúa navegando está aceptando su uso