Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
|
fw:android [2010/05/02 19:32] alfred |
fw:android [2020/05/09 09:25] (actual) |
||
|---|---|---|---|
| Línea 3: | Línea 3: | ||
| ===== General ===== | ===== General ===== | ||
| + | |||
| + | |||
| Línea 196: | Línea 198: | ||
| * ''Button'': Corresponde a un botón. | * ''Button'': Corresponde a un botón. | ||
| * ''ImageButton'': Botón con imágen. La imágen ha de estar en ''res/drawable-xxx'' y para indicar cual será la que se mostrará lo haremos a partir de la propiedad ''src'', indicando ''@drawable/nombre-de-archivo-sin-extensión''. Por ejemplo: ''android:src="@drawable/state"''. | * ''ImageButton'': Botón con imágen. La imágen ha de estar en ''res/drawable-xxx'' y para indicar cual será la que se mostrará lo haremos a partir de la propiedad ''src'', indicando ''@drawable/nombre-de-archivo-sin-extensión''. Por ejemplo: ''android:src="@drawable/state"''. | ||
| + | |||
| + | |||
| ==== Recursos ==== | ==== Recursos ==== | ||
| - | Un recurso es la parte de la aplicación que no es código (por ejemplo imagenes, sonidos, textos...) pero que se compilan con esta. Han de guardarse en el directorio ''res'' de la aplicación. Cuando lo hacen se crea una clase denominada ''R'' que contiene los identificadores a cada uno de los recursos para poder acceder a estos desde el código, para ello en el directorio ''res'' se crean subdirectorios, como por ejemplo el ''layout'' y dentro de este archivos como por ejemplo el ''main.xml'', que sería el layout principal. Para acceder a este layout haríamos ''R.layout.main''. La clase ''R'' la maneja automáticamente Eclipse. | + | Un recurso es la parte de la aplicación que no es código (por ejemplo imagenes, sonidos, textos...) pero que se compilan con esta. Han de guardarse en el directorio ''res'' de la aplicación. Cuando lo hacen se crea una clase denominada ''R'' que contiene los identificadores a cada uno de los recursos para poder acceder a estos desde el código, para ello en el directorio ''res'' se crean subdirectorios, como por ejemplo el ''layout'' y dentro de este archivos como por ejemplo el ''main.xml'', que sería el layout principal. Para acceder a este layout haríamos ''R.layout.main''. La clase ''R'' la maneja automáticamente Eclipse. |
| === Strings === | === Strings === | ||
| Dentro del proyecto, en la carpeta ''res'' encontraremos la subcarpeta ''values'' con el fichero ''string.xml''. Este corresponde a los textos de la aplicación. | Dentro del proyecto, en la carpeta ''res'' encontraremos la subcarpeta ''values'' con el fichero ''string.xml''. Este corresponde a los textos de la aplicación. | ||
| Línea 235: | Línea 239: | ||
| Ahora en las propiedades que acepten colores podremos asignar estos valores como ''@color/black'', por ejemplo. | Ahora en las propiedades que acepten colores podremos asignar estos valores como ''@color/black'', por ejemplo. | ||
| + | === Más... === | ||
| + | * Para acceder a los recursos desde una ''Activity'' utilizaremos el método ''getResources()''. | ||
| + | <code java> | ||
| + | String[] countries = getResources().getStringArray(R.array.countries_array); | ||
| + | </code> | ||
| - | + | ==== Activity ==== | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | ==== Activities e Intents ==== | + | |
| Las activities son lo equivalentes a "ventanas" dentro de nuestra aplicación. \\ | Las activities son lo equivalentes a "ventanas" dentro de nuestra aplicación. \\ | ||
| Para agregar una Activity a nuestra aplicación necesitamos: | Para agregar una Activity a nuestra aplicación necesitamos: | ||
| Línea 269: | Línea 273: | ||
| <activity android:name=".About" android:label="@string/State" /> | <activity android:name=".About" android:label="@string/State" /> | ||
| </code> | </code> | ||
| - | Siendo ''About'' el nombre de la clase y ''State'' el título que queramos darle. | + | Siendo ''About'' el nombre de la clase y ''State'' el título que queramos darle. \\ |
| - | + | Cuando una clase Activity llamaremos al ''setContentView'' para indicar su layout. | |
| - | === Métodos y propiedades de las Activity === | + | |
| - | * Para finalizar una ''Activity'' llamaremos a su método ''finish()''. | + | |
| - | + | ||
| - | === Intent === | + | |
| - | Los ''android.content.Intent'' son los que lanzan objetos ''Activity''. Desde un objeto ''Activity'' crearemos un objeto ''Intent'', en su constructor indicaremos el objeto que lo crea (''this'') y el objeto ''Class'' correspondiente a la clase ''Activity'' que queramos lanzar. | + | |
| - | <code java> | + | |
| - | Intent i = new Intent(this, About.class); | + | |
| - | this.startActivity(i); | + | |
| - | </code> | + | |
| - | + | ||
| - | + | ||
| - | === Activity inicial === | + | |
| - | Cuando se crea la clase principal de un proyecto llamaremos al ''setContentView'' para indicar su layout. | + | |
| <code java> | <code java> | ||
| package my.test; | package my.test; | ||
| Línea 297: | Línea 288: | ||
| } | } | ||
| } | } | ||
| + | </code> | ||
| + | |||
| + | === Abriendo Activities === | ||
| + | Para iniciar una ''Activity'' necesitaremos utilizar un objeto ''Intent'' y lo haremos a partir de los siguientes métodos: | ||
| + | * ''startActivity'': Inicia una nueva actividad, esta reemplazará la actual en la pila de actividades. | ||
| + | * ''startActivityForResult'': Cuando queramos recoger información de la ''Activity'' que iniciamos, para recoger su resultado necesitaremos sobreescribir el método ''onActivityResult'' de la ''Activity'' que ejecuta este. Para controlar que se ha escogido un resultado y que no se ha salido con la tecla de //atrás// podremos recoger en el primer integer el estado, si este es ''RESULT_OK'' es que ha salido bien. | ||
| + | |||
| + | Para pasar argumentos entre objetos ''Activity'' utilizaremos la clase ''android.os.Bundle'', en esta podemos agregar información (mediante el método '''') y recogerla (mediante ''''). \\ | ||
| + | Por ejemplo una Activity A va a abrir una Activity B, para enviarle información a esta haremos: | ||
| + | <code java> | ||
| + | Bundle b = new Bundle(); | ||
| + | String strValue = "Test"; | ||
| + | b.putString("elements", strValue); | ||
| + | b.putInt("type", Main.AskClient); | ||
| + | Intent i = new Intent(this, OpenVideo.class); | ||
| + | i.putExtras(b); | ||
| + | this.startActivityForResult(i, 0); | ||
| + | </code> | ||
| + | Al crearse la Activity B lo primero que hace es mirar los datos pasados: | ||
| + | <code java> | ||
| + | this.type = this.getIntent().getExtras().getInt("type"); | ||
| + | </code> | ||
| + | Una vez que ha hecho todo lo que tiene que hacer devuelve la información en otro ''Bundle'': | ||
| + | <code java> | ||
| + | Bundle bundle = new Bundle(); | ||
| + | bundle.putInt("selected", arg2 - 1); | ||
| + | Intent mIntent = new Intent(); | ||
| + | mIntent.putExtras(bundle); | ||
| + | setResult(RESULT_OK, mIntent); | ||
| + | this.finish(); | ||
| + | </code> | ||
| + | Y en el ''onActivityResult'' de la Activity A: | ||
| + | <code java> | ||
| + | protected void onActivityResult(int requestCode, int resultCode, Intent data) { | ||
| + | if (resultCode != RESULT_OK) | ||
| + | return; | ||
| + | Bundle bundle = data.getExtras(); | ||
| + | int type = bundle.getInt("type"); | ||
| + | </code> | ||
| + | === Métodos y propiedades de las Activity === | ||
| + | * Para finalizar una ''Activity'' llamaremos a su método ''finish()''. | ||
| + | |||
| + | |||
| + | |||
| + | ==== Intent ==== | ||
| + | Los ''android.content.Intent'' son los que lanzan objetos ''Activity''. Desde un objeto ''Activity'' crearemos un objeto ''Intent'', en su constructor indicaremos el objeto que lo crea (''this'') y el objeto ''Class'' correspondiente a la clase ''Activity'' que queramos lanzar. | ||
| + | <code java> | ||
| + | Intent i = new Intent(this, About.class); | ||
| + | this.startActivity(i); | ||
| + | </code> | ||
| + | |||
| + | |||
| + | |||
| + | ==== Vistas ==== | ||
| + | === ListView === | ||
| + | Muestran en una ''Activity'' una lista de elementos. Existe la ''Activity'' especial para mostrar estas llamada ''ListActivity'', por lo tanto si queremos crear una lo que haremos será agregar una clase que herede de esta. Para rellenarla necesitaremos utilizar objetos ''ListAdapter'' que corresponden a listas\arrays que le agregaremos, para recoger cuando se ha hecho click sobre un elemento utilizaremos el método ''setOnItemClickListener'' de la lista interna que recogeremos mediante ''getListView()'': | ||
| + | <code java> | ||
| + | public class OpenVideo extends ListActivity implements OnItemClickListener { | ||
| + | protected void onCreate(Bundle savedInstanceState) { | ||
| + | super.onCreate(savedInstanceState); | ||
| + | String param = this.getIntent().getExtras().getString("elements"); | ||
| + | String[] elems = param.split("\\?"); | ||
| + | setListAdapter(new ArrayAdapter<String>(this, R.layout.openvideo, elems)); | ||
| + | android.widget.ListView lv = this.getListView(); | ||
| + | lv.setOnItemClickListener(this); | ||
| + | } | ||
| + | public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { | ||
| + | Bundle bundle = new Bundle(); | ||
| + | bundle.putInt("selected", arg2); | ||
| + | setResult(RESULT_OK, mIntent); | ||
| + | this.finish(); | ||
| + | } | ||
| + | } | ||
| + | </code> | ||
| + | Por lo demás, al ser una Activity tendremos que agregarla al ''AndroidManifest.xml'' y crear su layout: | ||
| + | <code xml> | ||
| + | <?xml version="1.0" encoding="utf-8"?> | ||
| + | <TextView xmlns:android="http://schemas.android.com/apk/res/android" | ||
| + | android:layout_width="fill_parent" | ||
| + | android:layout_height="fill_parent" | ||
| + | android:padding="10dp" | ||
| + | android:textSize="16sp" > | ||
| + | </TextView> | ||
| </code> | </code> | ||
| Línea 328: | Línea 402: | ||
| } | } | ||
| </code> | </code> | ||
| + | |||
| + | |||
| Línea 344: | Línea 420: | ||
| + | === ... Crear mensajes === | ||
| + | * **android.widget.Toast** | ||
| + | Son los más sencillos, muestran un mensaje en la parte de abajo de la pantalla: | ||
| + | <code java> | ||
| + | Toast.makeText(this.getApplicationContext(), "Recuerda inicializar la wifi!!", Toast.LENGTH_LONG).show(); | ||
| + | </code> | ||
| + | * **android.app.AlertDialog** | ||
| ===== Programando aplicaciones ===== | ===== Programando aplicaciones ===== | ||
| Línea 396: | Línea 479: | ||
| } | } | ||
| </code> | </code> | ||
| + | |||
| Línea 413: | Línea 497: | ||
| import android.preference.PreferenceActivity; | import android.preference.PreferenceActivity; | ||
| public class Settings extends PreferenceActivity { | public class Settings extends PreferenceActivity { | ||
| - | |||
| @Override | @Override | ||
| protected void onCreate(Bundle savedInstanceState) { | protected void onCreate(Bundle savedInstanceState) { | ||
| Línea 447: | Línea 530: | ||
| </code> | </code> | ||
| Al método ''getBoolean'' se le pasa el key de una setting boolean y, si no estubiese definida, su valor por defecto. | Al método ''getBoolean'' se le pasa el key de una setting boolean y, si no estubiese definida, su valor por defecto. | ||
| - | ==== Dialogos ==== | + | |
| - | * ''android.app.AlertDialog'' | + | |
| ==== Estados de una aplicación ==== | ==== Estados de una aplicación ==== | ||
| Línea 477: | Línea 560: | ||
| ==== El emulador ==== | ==== El emulador ==== | ||
| * ''ctrl + f11'' harán que el emulador cambie de horizontal a vertical. | * ''ctrl + f11'' harán que el emulador cambie de horizontal a vertical. | ||
| + | |||
| ==== En un dispositivo físico ==== | ==== En un dispositivo físico ==== | ||
| Línea 498: | Línea 582: | ||
| Aunque en otros he visto: ''chmod a+rx /etc/udev/rules.d/51-android.rules'' | Aunque en otros he visto: ''chmod a+rx /etc/udev/rules.d/51-android.rules'' | ||
| === Herramientas === | === Herramientas === | ||
| - | * El comando ''ddms'' del directorio tools nos abrirá el monitor de debug de Alvik, con él podremos hacer capturas de pantalla. | + | * El comando ''ddms'' del directorio tools nos abrirá el monitor de debug de Dalvik, con él podremos hacer capturas de pantalla. |