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:34] 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 ==== | ==== Activity ==== | ||
| Línea 270: | 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. | |
| - | + | ||
| - | === 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 290: | Línea 290: | ||
| </code> | </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 === | === Métodos y propiedades de las Activity === | ||
| * Para finalizar una ''Activity'' llamaremos a su método ''finish()''. | * Para finalizar una ''Activity'' llamaremos a su método ''finish()''. | ||
| + | |||
| Línea 302: | Línea 340: | ||
| + | |||
| + | ==== 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> | ||
| ==== Interactuar mediante Java ==== | ==== Interactuar mediante Java ==== | ||
| Línea 332: | Línea 402: | ||
| } | } | ||
| </code> | </code> | ||
| + | |||
| Línea 350: | Línea 421: | ||
| === ... Crear mensajes === | === ... Crear mensajes === | ||
| - | Los más sencillos son los ''android.widget.Toast'', que muestran un mensaje en la parte de abajo de la pantalla: | + | * **android.widget.Toast** |
| + | Son los más sencillos, muestran un mensaje en la parte de abajo de la pantalla: | ||
| <code java> | <code java> | ||
| Toast.makeText(this.getApplicationContext(), "Recuerda inicializar la wifi!!", Toast.LENGTH_LONG).show(); | Toast.makeText(this.getApplicationContext(), "Recuerda inicializar la wifi!!", Toast.LENGTH_LONG).show(); | ||
| </code> | </code> | ||
| + | * **android.app.AlertDialog** | ||
| ===== Programando aplicaciones ===== | ===== Programando aplicaciones ===== | ||
| Línea 406: | Línea 479: | ||
| } | } | ||
| </code> | </code> | ||
| + | |||
| Línea 423: | 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 457: | 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 487: | 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 508: | 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. |