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:44] 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 289: | Línea 289: | ||
| } | } | ||
| </code> | </code> | ||
| + | |||
| + | === Abriendo Activities === | ||
| Para iniciar una ''Activity'' necesitaremos utilizar un objeto ''Intent'' y lo haremos a partir de los siguientes métodos: | 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. | * ''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. | + | * ''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 305: | Línea 337: | ||
| Intent i = new Intent(this, About.class); | Intent i = new Intent(this, About.class); | ||
| this.startActivity(i); | 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 413: | Línea 479: | ||
| } | } | ||
| </code> | </code> | ||
| + | |||
| Línea 430: | 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 494: | 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 515: | 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. |