1.-Posibilidades de recepción de eventos: listener y método.
Eventos con listener Eventos sin listener (método para el eve...
2.-Controles Android:
Control Abrev. Uso Dibujo Atributos Métodos Listener / Código de uso
Adapter Estructura de datos
par...
GridView android:numColumns=”entero|auto_fit”
android:columnWidth=”enterosp|dp|px”,
android:horizontalSpacing=”enterosp|dp...
boolean fromUser) {
txtRatingValue.setText(String.valueOf(rating));
}
});
SeekBar android:max="100"
android:progress="50"
...
3.-Programando:
Media Volume
Permite acceso a
los volúmenes de
audio.
AudioManager.STREAM_MUSIC
AudioManager.STREAM_RING
A...
.pause()
.stop();
Boolean .isPlaying();
Int .getCurrentPosition();
Int .getDuration();
.seekTo(Int);
mPlayer.prepare();
} ...
String Permiten definir recursos de tipo texto para facilitar traducciones de apps.
Acceso como propiedad: @string/[Nombre...
5.- Errores de eclipse:
En algunos casos Eclipse da un error que no existe, que evita poder ejecutar el código. Este error...
6.- Uso general
PACKAGE-IMPORT:
package ejemplo.conversor; import ejemplo.conversor.EurosptasActivity; import ejemplo.conv...
SPINNER(cmb): Oncreate para meterle los datos...
final TextView lblMensaje = (TextView)findViewById(R.id.LblMensaje);
fina...
Upcoming SlideShare
Loading in...5
×

Carlos blanco resumen mm android controles 10pag v5

436
-1

Published on

Resumen de controles de Android SDK

Published in: Software
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
436
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Carlos blanco resumen mm android controles 10pag v5

  1. 1. 1.-Posibilidades de recepción de eventos: listener y método. Eventos con listener Eventos sin listener (método para el evento definido en propiedades) package com.carlosblanco.android; import android.os.Bundle; //todos los widget:button, TextView, ..., etc import android.app.Activity; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.*; import android.app.Activity; import android.view.Menu; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final Button boton = (Button) findViewById(R.id.button1); boton.setOnClickListener(new View.OnClickListener() { public void onClick(View sender) { Toast.makeText(getApplicationContext(), "Hola DAM2 con listener y toast", Toast.LENGTH_LONG).show(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } }//activity package com.carlosblanco.android; import android.os.Bundle; //todos los widget:button, TextView, ..., etc import android.app.Activity; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.*; import android.app.Activity; import android.view.Menu; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } public void procesar(View clickedButton) { Toast.makeText(getApplicationContext(), "Hola 2ºDAM eventos sin listener", Toast.LENGTH_LONG).show(); } } //Recuerda poner procesar en el evento on click del botón en sus // propiedades desde la pantalla de diseño de layouts Carlos Blanco Domínguez – 2013-2014 -Desarrollo de Aplicaciones Multiplataforma - www.cmaleon.es - DAM2 Pág 1 / 10
  2. 2. 2.-Controles Android: Control Abrev. Uso Dibujo Atributos Métodos Listener / Código de uso Adapter Estructura de datos para controles de selección: Spinner, ListView, GridView, Gallery, ... //ArrayAdapter:Es el más sencillo de todos los adaptadores, y provee de datos a un control de selección a partir de un array de objetos de cualquier tipo. final String[] datos = new String[]{"Elem1","Elem2","Elem3","Elem4","Elem5"}; ArrayAdapter<String> adaptador = new ArrayAdapter<String>(this,android. R.layout.simple_spinner_item, datos); //this es la actividad actual, cte del sistema, y el vector de datos. //SimpleAdapter: Se utiliza para mapear datos sobre los diferentes controles definidos en un fichero XML de layout. <?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="valores_array"> <item>Elem1</item> <item>Elem2</item> <item>Elem3</item> <item>Elem4</item> <item>Elem5</item> </string-array> </resources> ArrayAdapter<CharSequence> adaptador = ArrayAdapter.createFromResource(this, R.array.valores_array, android.R.layout.simple_spinner_item); //activiy, id_arr_xml, cte) //SimpleCursorAdapter: Se utiliza para mapear las columnas de un cursor abierto sobre una base de datos, sobre los diferentes elementos visuales del control de selección. pendiente... Ejemplos de adaptadores sobre el vector Java anterior: ArrayAdapter<String> adaptador = new ArrayAdapter<String>(this,android. R.layout.simple_spinner_item, datos); //this=actividad actual, item=cte , y datos=vector. ArrayAdapter<String> adaptador = new ArrayAdapter<String>(this,android. R.layout.simple_list_item_1, datos); ...pendiente de acabar otros ejemplos con listas, etc... Activity dp=Density-independent Pixels sp = Scale-independent Pixels .setTitle(String) Button cmd Botón de comando simple o con imagen (drawableLeft) android:text="texto" android:text="@string/cadena" android:background="color" android:typeface="fuente" android:drawableLeft=img android:textSize="10sp|10dp", ... final btnBoton1 = (Button)findViewById(R.id.BtnBoton1); final lblMensaje=(TextView)findViewById(R.id.TextView1); cmdBoton1.setOnClickListener(new View.OnClickListener() { public void onClick(View sender) { lblMensaje.setText("Botón 1 pulsado!"); } }); CheckBox chk Interruptor on/off. android:text="@string/cadena" android:checked="false" Boolean .isChecked() .setChecked(Boolean); final CheckBox fumador = (CheckBox)findViewById(R.id.checkBox1); fumador.setOnCheckedChangeListener( new CheckBox.OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) …; else …; //algo que hacer en cada estado ON/OFF } //onCheckedChange }); //Listener EditText txt Caja de texto editable con plantillas para número, email, ... nombre y clave. android:lines="5" android:hint="texto" (ayuda) android:inputType="normal|phone|num ber|textPersonName|textUri|textEmailAd dress|textPassword|text" String .getText().toString() .setText(String) int .length() final EditText txtCaja = (EditText) findViewById(R.id.editText1); String s=txtCaja.getText().toString(); txtCaja.setText("Otro texto en pantalla"); lblTexto.setText("Hola " + etCaja.getText().toString()); Carlos Blanco Domínguez – 2013-2014 -Desarrollo de Aplicaciones Multiplataforma - www.cmaleon.es - DAM2 Pág 2 / 10
  3. 3. GridView android:numColumns=”entero|auto_fit” android:columnWidth=”enterosp|dp|px”, android:horizontalSpacing=”enterosp|dp” android:verticalSpacing=”enterosp|dp” android:stretchMode=“columnWidth|spacingWidth” Una vez definida la interfaz de usuario, la forma de asignar los datos desde el código de la aplicación es completamente análoga a la ya comentada tanto para las listas desplegables como para las listas estáticas: creamos un array genérico que contenga nuestros datos de prueba, declaramos un adaptador de tipo ArrayAdapter pasándole en este caso un layout genérico (simple_list_item_1, compuesto por un simple TextView) y asociamos el adaptador al control GridView mediante su método setAdapter(): String[] datos = new String[25]; //mejor si es 1 atributo de la clase for(int i=1; i<=25; i++) datos[i-1] = "Dato " + i; ArrayAdapter<String> adaptador = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, datos); final grdOpciones = (GridView)findViewById(R.id.GridOpciones); grdOpciones.setAdapter(adaptador); grdOpciones.setOnItemClickListener( new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> parent, android.view.View v, int position, long id) { lblMensaje.setText("Opción seleccionada: " + datos[position]); } }); ImageButton cmd Botón con una imagen en su interior. android:src="@drawable/ok" //ok.png .show() .setDuration(Toast.LENGTH_ LONG/SHORT); ( = = = setOnClickListener) ImageView img Permite mostrar imágenes en la app. android:src="@drawable/hola" //hola.png android:scaleType = “entero” (5=CENTER, 6=CENTER_CROP, 7=CENTER_INSIDE, …) final ImageView img= (ImageView)findViewById(R.id.imageView1); img.setImageResource(R.drawable.hola); //cambiar img en Java ListView lst La cte a usar en el adaptador es: android.R.layout.simple_list _item_1 final lstOpciones = (ListView)findViewById(R.id.LstOpciones); lstOpciones.setAdapter(adaptador); RadioButton ra Opción única de entre varias. android:text="@string/cadena" android:checked="false" Boolean .isChecked() String s; final RadioButton raMill= (RadioButton) findViewById(R.id.raMill); if (raMill.isChecked()) s="Has seleccionado la opción de ser millonario"; RadioGroup rg Agrupa varios RadioButtons para que solo uno de ellos sea marcado, desactivando los demás. Int .getCheckedRadioButtonId() Boolean .check(R.id.cte) //ON .clearCheck() //todos a OFF String s; RadioGroup radios=(RadioGroup) findViewById(R.id.radioGroup1); RadioButton masculino=(RadioButton) findViewById(R.id.radio0); RadioButton femenino=(RadioButton) findViewById(R.id.radio1); int selectedId = radios.getCheckedRadioButtonId(); if (selectedId==masculino.getId()) s="Veo que eres un hombren"; if (selectedId==R.id.radio1) s="Veo que eres una mujern"; //otra forma RatingBar android:numStars="10" android:stepSize="1.0" android:rating="2.0" android:isIndicator="false" (v4.0) .getRating() ratingBar = (RatingBar) findViewById(R.id.ratingBar); txtRatingValue = (TextView) findViewById(R.id.txtRatingValue); //si la puntuación cambia, mostrarla en el textview ratingBar.setOnRatingBarChangeListener(new OnRatingBarChangeListener() { public void onRatingChanged(RatingBar ratingBar, float rating, Carlos Blanco Domínguez – 2013-2014 -Desarrollo de Aplicaciones Multiplataforma - www.cmaleon.es - DAM2 Pág 3 / 10
  4. 4. boolean fromUser) { txtRatingValue.setText(String.valueOf(rating)); } }); SeekBar android:max="100" android:progress="50" android:secondaryProgress="75" .getProgress() barra.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { @Override public void onStopTrackingTouch(SeekBar seekBar) { ... } @Override public void onStartTrackingTouch(SeekBar seekBar) { ... } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if(fromUser) …; //el usuario ha cambiado la posición } }); //listener Spinner cmb Selector de una opción entre varias (combo). Requiere un String[] o un string-array de .xml Android:prompt="Choose a Planet" .getSelectedItem() .setAdapter(adapter); En listener definimos 2 métodos onItemSelected para cuando se seleccione una opción en la lista desplegable. onNothingSelected cuando no haya ninguna opción seleccionada (pej adaptador sin datos). cmbOpciones.setOnItemSelectedListener( new AdapterView.OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent, android.view.View v, int position, long id) { lblMensaje.setText("Seleccionado: " + datos[position]); } public void onNothingSelected(AdapterView<?> parent) { lblMensaje.setText(""); } }); TextView lbl Enlace a URL, teléfono o google maps al hacer clic. android:autoLink="none|web|email|pho ne| map|All" (todos los del textview normal) TextView lbl Texto no editable android:text="Texto de ejemplo" android:background="#AA44FF" android:typeface="monospace" .setText(String) final lblMensaje=(TextView)findViewById(R.id.TextView1); lblMensaje.setText("El texto ha cambiado!!!"); lblMensaje.setBackGroundColor(Color.Blue); Toast Mensaje temporal en pantalla. Toast.makeText(getApplicationContext(), "Mensaje que desaparece Rapido",Toast.LENGTH_SHORT).show(); Toast.makeText(getApplicationContext(), "Has seleccionado G", Toast.LENGTH_LONG).show(); ToggleButton cmd Fusión de un botón y un checkbox. Permite un texto para cada estado. android:textOn="texto" android:textoOff ="texto" Boolean .isChecked() final btnBoton2 = (ToggleButton)findViewById(R.id.BtnBoton2); btnBoton2.setOnClickListener(new View.OnClickListener() { public void onClick(View sender) { if(btnBoton2.isChecked()) lblMensaje.setText("Botón 2: ON"); else lblMensaje.setText("Botón 2: OFF"); } }); Carlos Blanco Domínguez – 2013-2014 -Desarrollo de Aplicaciones Multiplataforma - www.cmaleon.es - DAM2 Pág 4 / 10
  5. 5. 3.-Programando: Media Volume Permite acceso a los volúmenes de audio. AudioManager.STREAM_MUSIC AudioManager.STREAM_RING AudioManager.STREAM_ALARM AudioManager.STREAM_NOTIFICATION AudioManager.STREAM_SYSTEM AudioManager.STREAM_VOICECALL El último parámetro para setStreamVolume(), es un flasg que dice como indicar al usuario el cambio en el volumen. FLAG_PLAY_SOUND – hacer un beep FLAG_SHOW_UI – con un toast FLAG_VIBRATE – con una vibración mAudioManager.adjustStreamVolume(AudioManager.STR EAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI); ADJUST_LOWER Bajar volumen ADJUST_RAISE Subir volumen ADJUST_SAME Dejar el mismo volumen private AudioManager audio; audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE); //dentro del onCreate @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_VOLUME_UP: audio.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI); return true; case KeyEvent.KEYCODE_VOLUME_DOWN: audio.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI); return true; default: return false; } } //Poner volumen de videos al máximo AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); audioManager.setStreamVolume(AudioManager.STREAM_MUSIC /*cuál*/, audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC) /*volumen*/, AudioManager.FLAG_SHOW_UI /*indicador al usuario*/); Camera <manifest ... > <uses-feature android:name="android.hardware.camera" /> ... </manifest ... > http://developer.android.com/training/camera/photobasics.html Camera myCamera=Camera.open(); if(myCamera!=null){ try{ //set camera parameters if you want to //... // here, the unused surface view and holder SurfaceView dummy=new SurfaceView(context) myCamera.setPreviewDisplay(dummy.getHolder()); myCamera.startPreview(); myCamera.takePicture(null, null, getJpegCallback()): }finally{ myCamera.close(); } }else{ ; } //booo, failed! private PictureCallback getJpegCallback(){ PictureCallback jpeg=new PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { FileOutputStream fos; try { fos = new FileOutputStream("foto.jpg"); fos.write(data); fos.close(); } catch (IOException e) { ; } //do something about it } } }; } } MediaPlayer Métodos: .start(); MediaPlayer mPlayer = MediaPlayer.create(this, R.raw.ficheromp3); try { Carlos Blanco Domínguez – 2013-2014 -Desarrollo de Aplicaciones Multiplataforma - www.cmaleon.es - DAM2 Pág 5 / 10
  6. 6. .pause() .stop(); Boolean .isPlaying(); Int .getCurrentPosition(); Int .getDuration(); .seekTo(Int); mPlayer.prepare(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } mPlayer.start(); Calls android.content.*; android.net.*; android.os.*; android.util.*; new Intent(Intent.ACTION_CALL); .setData(Uri.parse("tel:600111222")); try { Intent llamar = new Intent(Intent.ACTION_CALL); llamar.setData(Uri.parse("tel:600111222")); startActivity(llamar); } catch (ActivityNotFoundException activityException) { Log.e("Codigo de llama", "Ha fallado la llamada!!!", activityException); //Añadimos un log de ERROR (e=Error, w=Warning, ) } SMS android.telephony.* Debes usar try & catch SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage("600111222", null, "Texto del SMS...", null, null); . 4,-Recursos: Clic derecho en Values->New->Android XML File/ Color Creación del .XML: Clic derecho en Values/New/Android XML File/ Resource Type: Values. Project: dejamos así nuestro proyecto activo. File: color. Root Element: resources. (clic en finalizar). Formato de los colores: #RGB | #ARGB | #RRGGBB | #AARRGGBB Acceso como propiedad: @color/[NombreDelColor]. Ej: @color/Rojo Acceso desde código Java: R.color.NombreDelColor. Ej: R.color.Rojo Puede haber más de un fichero de colores, se gestionarán como uno solo < ?xml version="1.0" encoding="utf-8"?> < resources> < color name="Negro">#000000</color> < color name="Blanco">#FFFFFF</color> < color name="Gris">#808080 < color name="Amarillo">#FFFF00 <color name="rojotranslucido">#80ff0000</color> < color name="Rojo">#FF0000 < color name="Verde">#00FF00 < /resources> final RadioButton estado = (RadioButton) findViewById(R.id.Radio1); estado.setTextColor(getResources().getColor(R.color.Rojo)); Image Permite png, jpg, gif. @drawable/ok => ok.png android:contentDescription="texto alternativo" final ImageView img=(ImageView)findViewById(R.id.img); img.setImageResource(R.drawable.android); Drawable Fichero que los contiene: strings.xml http://docs.since2006.com/android/2.1-drawables.php http://guajirandro.blogspot.com.es/2012/09/aplicando-estilos-css-y-degrad ados-en.html < ?xml version="1.0" encoding="utf-8"?> < resources> <drawable name="redBox">#ff0000</drawable> < /resources> final TextView txt=(TextView)findViewById(R.id.txt); txt.setBackgroundResource(R.drawable.redBox); //fondo componente ImageView img2 = (ImageView)findViewById(R.id.img2); img2.setImageResource(R.drawable.ic_menu_camera); //usar icono Carlos Blanco Domínguez – 2013-2014 -Desarrollo de Aplicaciones Multiplataforma - www.cmaleon.es - DAM2 Pág 6 / 10
  7. 7. String Permiten definir recursos de tipo texto para facilitar traducciones de apps. Acceso como propiedad: @string/[NombreCadena]. Ej: @string/saludo Acceso desde Java: getString(R.string.NombreCadena);. Ej: String x=getString(R.string.autor); String con formato:%1 primer param, %2 segundo ,... . $s=string; $d=int; %1$s => primer parámetro será una cadena %2$d => segundo parámetro será un entero (es simila a sprintf en PHP) Cadenas con HTML: CharSequence styledText = Html.fromHtml(str); Convertir a String: String cadenaformateada=styleText.toString(); <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">Ejemplo1</string> <string name="euros">%1$s tiene %1$d eur</string> <string name="autor">Carlos Blanco</string> <string name="aviso">Debes <b>meter</b> tu <u>nombre</u> en la caja</string> </resources> final lblMensaje=(TextView)findViewById(R.id.TextView1); lblMensaje.setText(getString(R.string.autor)); int dinero = 200; //200 euros String autor=getString(R.string.autor); //Carlos Blanco String strfmt = getResources().getString(R.string.euros); //%1$ ... String resultado = String.format(strfmt, autor, dinero); //resultado="Carlos Blanco tiene 200 eur"; CharSequence styledText = Html.fromHtml(getString(R.string.aviso)); String cadenaformateada=styledText.toString(); //La convierte a String String otraforma=getString(R.string.aviso); //Coge la cadena con Html del fichero de recursos: @string/aviso String-array Es un conjunto de elementos o array de cadenas, que se define en un fichero de cadenas como por ejemplo strings.xml. Se usa para Spinners que siempre tienen las mismas elecciones. <string-array name="planetas_array"> <item>Mercurio</item> <item>Venus</item> <item>Tierra</item> </string-array> . Menus ./res/menu/ <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/MnuOpc1" android:title="Informatica"> <menu> <item android:id="@+id/MnuOpc1a" android:title="DAM" /> <item android:id="@+id/MnuOpc1b" android:title="ASIR" /> </menu> </item> <item android:id="@+id/SubMnuOpc2" android:title="RAE" /> </menu> public boolean onOptionsItemSelected(MenuItem item) { String s=""; switch (item.getItemId()) { case R.id.MnuOpc1: s="Opcion 1. Informatica”; break; case R.id.MnuOpc1a: s="Opcion 1a. DAM"; break; case R.id.MnuOpc1b: s="Opcion 1b. ASIR"; break; case R.id.SubMnuOpc2: s="Opcion 2. RAE"; break; default: return super.onOptionsItemSelected(item); } if (s.length()>0) //si elección válida, s!=”” Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show(); return true; //volver siempre con true desde un menú } Carlos Blanco Domínguez – 2013-2014 -Desarrollo de Aplicaciones Multiplataforma - www.cmaleon.es - DAM2 Pág 7 / 10
  8. 8. 5.- Errores de eclipse: En algunos casos Eclipse da un error que no existe, que evita poder ejecutar el código. Este error se distingue porque solo aparece una X roja junto a la carpeta contenedora del proyecto, pero en ningún otro lugar del proyecto, como puede ser: clase, layout, String.xml, etc. Es un problema de Eclipse por no poder referenciar R. Este error viene por problemas con las referencias que provocan que R no puede regenerarse. Normalmente se corrige solo, pero alguna veces no. Existen varias soluciones que pueden corregir el problema. Recomendamos empezar por la primera solución propuesta y ver si se soluciona, sino pasar a la siguiente. 1.- cerrar eclipse , en win7 C:Users(username).android borrar la carpeta .android y luego abrir eclipse y todo funcionará bien. 2.- Comprobamos que Eclipse tenga marcado el tick “Build Automatically” que se encuantra en el menú “Project”. 3.- Comprobar que los XML estén bien formados. Es decir, abrir archivo a archivo de la carpeta “res”, para ver si Eclipse al abrirla marca el XML con fallo (X roja) o Warning que impida la referencias (los Warning de “deprecated” o recomendaciones no son la causa). Normalmente el error viene porque aparece un Warning sobre algún ID del XML, que se arregla eliminado la línea entera del ID, guardando todo, volviendo a crear el ID desde cero, y guardando otra vez todo. Si es así, realizar los cambios oportunos y guardar todo. 4.- Para esta solución recomendamos realizar una copia de seguridad de todo el proyecto, por si acaso poder recuperar. La mayoría de las veces este error se soluciona en la pestaña “Project” de la barra de tareas. Y seleccionando “Clean…”. Esto sirve para limpiar y recargar el historial de errores de Eclipse. NOTA: Se recomienda encarecidamente hacer una copia del proyecto antes de hacer el “Clean…”. Probamos a seleccionar “Clean projects selected below”, y seleccionamos exclusivamente el proyecto que tenga el problema. Damos a “OK”. 5.- Después de haber hecho un solo clean de la “Solución 4″ volvemos a reiniciar Eclipse. Modificar un fichero cualquiera XML de la carpeta “res”. Por ejemplo, para que se quede como está añadir un espacio y quitarlo, luego guardarlo todo. Ficheros LECTURA (obligatorio el uso de try & catch): // abrir fichero en modo lectura InputStream instream = null; instream=openFileInput("fichero.txt"); // si hubo éxito en modo lectura, preparar la lectura InputStreamReader inputreader = new InputStreamReader(instream); BufferedReader buffreader = new BufferedReader(inputreader); String linea,texto=""; // mientras haya líneas, cogerlas una a una while (( linea = buffreader.readLine())!=null) texto+=linea+"n"; //el n se pierde al leer cada línea // Hacer lo que se desee con el texto leído Toast.makeText(getApplicationContext(), texto, Toast.LENGTH_SHORT).show(); // cerrar el fichero instream.close(); Ficheros ESCRITURA (obligatorio el uso de try & catch): OutputStreamWriter out = new OutputStreamWriter(openFileOutput("fichero.txt",MODE_APPEND)); //0 para sobreescribir (en vez de añadir) String texto=”Linea1nLinea2nLinea3n...”; // sacar la cadena out.write(texto+"n"); out.close(); // cerrar fichero LIMPIAR un fichero = 0 Bytes (obligatorio el uso de try & catch): OutputStreamWriter out = new OutputStreamWriter(openFileOutput("fichero.txt",0)); //0 para sobreescribir out.write(""); // sacar cadena vacía out.close(); // cerrar fichero Carlos Blanco Domínguez – 2013-2014 -Desarrollo de Aplicaciones Multiplataforma - www.cmaleon.es - DAM2 Pág 8 / 10
  9. 9. 6.- Uso general PACKAGE-IMPORT: package ejemplo.conversor; import ejemplo.conversor.EurosptasActivity; import ejemplo.conversor.R; //año pasado 12-13 (si se pierde R y no funcionase automáticamente) package es.carlosblanco.miapp; import android.app.Activity; //este año 13-14 import android.app.*; //Dialog, ... import android.os.Bundle; import android.view.View; import android.view.View.*; //Listeners import android.widget.*; //todos los widgets: Button, TextView, ..., etc import android.content.*; import android.net.*; import android.os.*; import android.util.*; //llamadas TOAST: Toast.makeText(getApplicationContext(), texto, Toast.LENGTH_SHORT).show(); //forma más rápida HTML: public void mostrar(View v) { final TextView visor=(TextView) findViewById(R.id.visor); String textoconformato=Html.toHtml((Spanned) visor.getText()); //coger como spanned el texto y devolverlo como html con sus tags Toast t=Toast.makeText(getApplicationContext(), textoconformato, Toast.LENGTH_SHORT); t.show(); } public void cambiar(View v) { final TextView visor=(TextView) findViewById(R.id.visor); visor.setText(Html.fromHtml("<p>Hola en <b>negrita!!!</b></p>")); } DIALOG: Primero definir un layout dialogo.xml... <LinearLayout ...> <TextView android:id="@+id/zonatexto" ... /> </LinearLayout> Dialog d = new Dialog(AlertaActivity.this); //nuevo dialogo de mi programa.this d.setContentView(R.layout.dialogo); //su diseño lo marca el fichero dialogo.xml (layout) d.setCancelable(true); //Cancelable=SI d.setTitle("Texto del dialogo"); //modifico el contenido del diálogo d.show(); //lo muestro CERRAR APP: finish(); //ej: en un on click CHECKBOX: public void desactivar(View v) { final CheckBox chkMillonario = (CheckBox)findViewById(R.id.chkMillonario); if (chkMillonario.isChecked()) chkMillonario.setChecked(false);//si aceptas ser millonario, te lo desactivo. Ej: Activar/Desactivar } RADIOGROUP-RADIOBUTTON: //Para activar uno, se deben desactivar los demás usando el método: .setChecked(boolean); final RadioGroup radios=(RadioGroup) findViewById(R.id.radioGroup1); final RadioButton masculino=(RadioButton) findViewById(R.id.radio0); final RadioButton femenino=(RadioButton) findViewById(R.id.radio1); int selectedId = radios.getCheckedRadioButtonId(); if (selectedId==masculino.getId()) ; else if (selectedId==femenino.getId()) ; //Marcado masculino o sinó miro si marcado fenemino Carlos Blanco Domínguez – 2013-2014 -Desarrollo de Aplicaciones Multiplataforma - www.cmaleon.es - DAM2 Pág 9 / 10
  10. 10. SPINNER(cmb): Oncreate para meterle los datos... final TextView lblMensaje = (TextView)findViewById(R.id.LblMensaje); final Spinner cmbOpciones = (Spinner)findViewById(R.id.cmbOpciones); final String[] datos = new String[]{"ASIR","DAM","RAE","AF","GA","PCPI informática"}; //Alternativa 1: Array java. El adaptador usará el vector: datos ArrayAdapter<String> adaptador = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, datos); //layout standar para spinner //Alternativa 2: Recurso XML de tipo string-array. El recurso es @resource valores_array.xml en res/values: <?xml ...?><resources> <string-array name="valores_array"><item>Elem1</item><item>Elem2</item>...</string-array></resources> //ArrayAdapter<CharSequence> adaptador = ArrayAdapter.createFromResource(this, R.array.valores_array, android.R.layout.simple_spinner_item); adaptador.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); //mostrar los elementos en un visor por defecto (con el piquito abajo derecha) cmbOpciones.setAdapter(adaptador); //decir al combo que coja los elementos del adaptador //***Para recoger el elem seleccionado: String textoseleccionado = cmbOpciones.getSelectedItem().toString(); //Elegir una opción sabiendo el valor que contiene de tipo string: int i=.getPosition(textolinea); .setSelection(i); //Elegir una opción por su posición/índice de 0..N-1: .setSelection(indice); VALUES: ./res/values/strings.xml: <resources> <string name="app_name">Android Spinner</string>...</resources> ./res/values/valores_array.xml: <?xml ...?><resources> <string-array name="valores_array"><item>Elem1</item><item>Elem2</item>...</string-array></resources> ./res/values/styles.xml: <resources><style name="AppTheme" parent="android:Theme.Light" /> ... </resources> BUNDLE: contenedor que permite guardar datos (+- como una lista o vector) con métodos para leerlos desde otra clase/actividad (clase, pantalla o form) //Métodos: .getFloat(strIndex) .getDouble(strIndex) .getString(strIndex) .getInt(strIndex) .getLong(strIndex) y sus correspondientes put. Bundle contenedor = new Bundle(); //Create bundle to reference values in next class contenedor.putInt("ODD", 1); contenedor.putLong("EVEN", 2); contenedor.putString("AUTOR", "Carlos Blanco"); contenedor.putFloat("PI", 3.141592625); //After all data has been entered and calculated, go to new page for results (inicio la otra actividad) Intent myIntent = new Intent(); //actividad==intent myIntent.setClass(getBaseContext(), Results.class); //la clase que llamará es Results.java, aunque puedo cambiar el valor a ´lo que sea´.class startActivity(myIntent); //Add the bundle into myIntent for referencing variables myIntent.putExtras(contenedor); //En la zona destino para acceder a los valores haremos...: Bundle contenedor = getIntent().getExtras(); int odd=contenedor.getInt("ODD"); String autor=contenedor.getString("AUTOR"); Ej clase FLOAT: Float euro=new Float(166.386); Float ptas=new Float(textocaja); Float resul=ptas*euro; String s=resul.toString(); Carlos Blanco Domínguez – 2013-2014 -Desarrollo de Aplicaciones Multiplataforma - www.cmaleon.es - DAM2 Pág 10 / 10
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×