Android

Android


4.INTRODUCCIÓN DE TEXTOS

Página 5 de 25

4.   INTRODUCCIÓN DE TEXTOS

4.1.   TextField

Se puede introducir texto interactivamente en una aplicación Android usando un campo de texto editable EditText, que se coloca dentro del Layout en el fichero main.xml, de la siguiente forma:

<EditText android:id="@+id/editText1"

      android:layout_width="fill_parent"

      android:layout_height="wrap_content"

      android:text="EditText">

</EditText>

Para acceder al texto introducido desde Java primero definimos el objeto EditText asociado al campo de texto editable y luego lo transformamos en String:

EditText textField=(EditText) findViewById(R.id.editText1);

String texto = textField.getText().toString();

Por ejemplo, la siguiente aplicación permite introducir un nombre que luego se muestra en pantalla cuando se pulsa un botón.

public class InputText extends Activity implements

                                            OnClickListener{

     EditText textField;

     String nombre;

     TextView tv;

     /** Called when the activity is first created. */

     @Override

     public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        textField=(EditText) findViewById(R.id.editText1);

        View boton=findViewById(R.id.button1);

        boton.setOnClickListener(this);

        tv=(TextView) findViewById(R.id.text2);

     }

     @Override

     public void onClick(View v){

        nombre = textField.getText().toString();

        tv.append("\nBienvenido, "+nombre);

     }

}

El resultado se ve en la figura 4.1.

Figura 4.1. Introducir texto con EditText.

En este ejemplo se ha utilizado el siguiente fichero main.xml:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android"

       android:background="#ffffdd"

       android:orientation="vertical"

       android:layout_width="fill_parent"

       android:layout_height="fill_parent"

       android:id="@+id/layout1"

       >

<TextView

       android:textSize="24sp"

       android:textColor="#000000"

       android:layout_width="fill_parent"

       android:layout_height="wrap_content"

       android:text="Introduzca su nombre"

       android:id="@+id/text1"

       />

<EditText android:id="@+id/editText1"

       android:layout_width="fill_parent"

       android:layout_height="wrap_content"

       android:text="EditText">

</EditText>

<Button android:text="Aceptar"

       android:id="@+id/button1"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content">

</Button>

<TextView

       android:textSize="24sp"

       android:textColor="#000000"

       android:layout_width="fill_parent"

       android:layout_height="wrap_content"

       android:text=""

       android:id="@+id/text2"

       />

</LinearLayout>

4.2.   OnKeyListener

Para terminar de introducir texto al pulsar la tecla ENTER se debe implementar la interfaz OnKeyListener. Esto implica que hay que definir el método onKey(), para que se realice una determinada acción al pulsar la tecla ENTER. Se definiría de la siguiente forma:

 class MyKeyListener implements OnKeyListener{

public boolean onKey(View v, int keyCode, KeyEvent event){

    if ((event.getAction() == KeyEvent.ACTION_DOWN) &&

               (keyCode == KeyEvent.KEYCODE_ENTER)) {

         // accion a realizar

         . . .

         return true;

       }

       return false;

   }

      }

Nótese que, al pulsar una tecla, se recoge un evento:

KeyEvent_ACTION_DOWN

y que la tecla ENTER envía un código:

KeyEvent.KEYCODE_ENTER

Seguidamente hay que crear un objeto "oyente" (listener), es decir, de la clase anterior:

OnKeyListener listener= new MyKeyListener();

y finalmente llamar al método setOnKeyListener() de la clase EditText:

edittext.setOnKeyListener(listener);

Esta implementación se ilustra en la siguiente actividad, donde se introduce un nombre que luego se muestra en pantalla y también en un Toast:

  public class InputText extends Activity{

EditText edittext;

TextView tv;

@Override

public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        tv=(TextView) findViewById(R.id.text2);

        edittext =(EditText) findViewById(R.id.editText1);

        class MyKeyListener implements OnKeyListener{

           public boolean onKey(View v, int keyCode,

                              KeyEvent event) {

                // si se pulsa la tecla enter

             if ((event.getAction() == KeyEvent.ACTION_DOWN) &&

               (keyCode == KeyEvent.KEYCODE_ENTER)) {

                  Toast.makeText(InputText.this,

                                edittext.getText(),

                                Toast.LENGTH_SHORT).show();

                  tv.setText("Bienvenido "

                             +edittext.getText());

                  return true;

                }

                return false;

            }

        }

        OnKeyListener listener= new MyKeyListener();

        edittext.setOnKeyListener(listener);

    }

 }

El resultado se muestra en la figura 4.2.

Figura 4.2. Introducir texto con OnKeyListener.

El fichero main.xml correspondiente al anterior ejemplo es el siguiente:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android"

       android:background="#ffffdd"

       android:orientation="vertical"

       android:layout_width="fill_parent"

       android:layout_height="fill_parent"

       android:id="@+id/layout1"

       >

<TextView

       android:textSize="24sp"

       android:textColor="#000000"

       android:layout_width="fill_parent"

       android:layout_height="wrap_content"

       android:text="Introduzca su nombre"

       android:id="@+id/text1"

       />

<EditText android:id="@+id/editText1"

       android:layout_width="fill_parent"

       android:layout_height="wrap_content"

       android:text="EditText">

</EditText>

<TextView

       android:textSize="24sp"

       android:textColor="#000000"

       android:layout_width="fill_parent"

       android:layout_height="wrap_content"

       android:text=""

       android:id="@+id/text2"

       />

</LinearLayout>

4.3.   Forma alternativa de implementar OnKeyListener

El siguiente código es equivalente al del ejemplo anterior. Presentamos aquí esta forma alternativa para ilustrar la flexibilidad del lenguaje Java. En el caso anterior la interfaz OnKeyListener se implementaba definiendo una clase interna dentro del método onCreate(). En este caso la implementamos en la clase principal de la actividad, de forma totalmente análoga a como hemos hecho para definir el método onClick()con los botones. Esto es consecuencia de que en Java, en principio, cualquier clase puede implementar una interfaz y se puede hacer según convenga.

  public class InputText extends Activity implements

                                            OnKeyListener{

EditText edittext;

TextView tv;

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        tv=(TextView) findViewById(R.id.text2);

        edittext =(EditText) findViewById(R.id.editText1);

        edittext.setOnKeyListener(this);

    }

    public boolean onKey(View v, int keyCode, KeyEvent event)

        {

         // si se pulsa la tecla enter

        if ((event.getAction() == KeyEvent.ACTION_DOWN) &&

            (keyCode == KeyEvent.KEYCODE_ENTER)) {

          Toast.makeText(InputText.this,

                         edittext.getText(),

                         Toast.LENGTH_SHORT).show();

          tv.setText("Bienvenido "+edittext.getText());

          return true;

        }

        return false;

}

 }

El presente método nos permite entender más fácilmente el código, pues nos ahorramos definir una clase y un objeto internos, lo que dificulta la lectura lineal del programa. Nótese que, puesto que ahora es la clase principal la que implementa OnKeyListener, la llamada a setOnKeyListener() se realiza con el argumento this, el objeto asociado a la clase de nuestra actividad:

edittext.setOnKeyListener(this);

Ir a la siguiente página

Report Page