Atom Blog

Como utilizar el AutoComplete en un EditText en Android con historial

En este corto post veremos como realizar el auto completado de palabras o frases dentro de un EditText en Android en Java

El AutoComplete en un EditText en Android es necesario cuando se requiere auto completar frases o palabras con las palabras que se han utilizado previamente. Para ello Android permite guardar un historial de las palabras introducidas a traves de las preferencias compartidas (SharedPreferences)

Antes que nada definimos el elemento AutoCompleteTextView dentro de nuestro archivo *.xml

<AutoCompleteTextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/textInput"
    android:layout_marginTop="108dp"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:editable="true"
    android:hint="Ingrese algo aqui"/>

Seguido de esto incluimos el siguiente código en la clase *.java

public static final String PREFS_NAME = "PingBusPrefs";
public static final String PREFS_SEARCH_HISTORY = "SearchHistory";
private SharedPreferences settings;
private Set<String> history;


Luego definimos el siguiente metodo:

private void setAutoCompleteSource()
{
    AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.textInput);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(
  this, android.R.layout.simple_list_item_1, history.toArray(new String[history.size()]));
    textView.setAdapter(adapter);
}

Guardamos cada valor introducido en el editor de texto:

private void addSearchInput(String input)
{
    if (!history.contains(input))
    {
        history.add(input);
        setAutoCompleteSource();
    }
}

Utilizamos el siguiente metodo para guardar las palabras introducidas en las preferencias compartidas:

private void savePrefs()
{
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
    SharedPreferences.Editor editor = settings.edit();
    editor.putStringSet(PREFS_SEARCH_HISTORY, history);

    editor.commit();
}

Configuramos las siguientes variables:

settings = getSharedPreferences(PREFS_NAME, 0);
history = settings.getStringSet(PREFS_SEARCH_HISTORY, new HashSet<String>());

setAutoCompleteSource();

final AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.textInput);
textView.setOnKeyListener(new View.OnKeyListener()
{
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        // If the event is a key-down event on the "enter" button
        if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
                (keyCode == KeyEvent.KEYCODE_ENTER)) {

            addSearchInput(textView.getText().toString());
            return true;
        }
        return false;
    }
});

@Override
protected void onStop()
{
    super.onStop();

    savePrefs();
}

Como conectar una Base de Datos en MySQL con Netbeans 7

En este nuevo post veremos como conectarnos a una base de datos en MySQL desde Netbeans 7.1.

Para poder crear la conexion necesitaremos tener los siguientes componentes:
-Netbeans 7.1.
-Se necesitara tener instalado: MySQL.
-El driver para conectarnos a la base de datos: mysql-connector-java-5.0.8-bin.jar.

Una vez descargado el driver lo copiaremos a la carpeta donde se encuentra instalado el jdk, en mi caso es:

C:\Program Files (x86)\Java\jdk1.6.0_31\jre\lib\ext

El siguiente paso es reiniciar el Netbeans.

Ahora nos dirigimos a la pestana de netbeans llamada Services, como se puede observar en la siguiente imagen y hacemos click derecho sobre Drivers, y pulsamos en New Driver.


Luego pulsamos en add.


Seleccionamos el archivo mysql-connector-java-5.0.8-bin.jar y pulsamos en ok.

Deberia mostrarse de la siguiente manera:


Nuestro siguiente paso es crear la conexion. Haremos click en Connect Using como se observa en la siguiente imagen.

Escribiremos los siguientes datos:
Host: localhost
Database: mysql
Port: 3306
User Name: root
Password: 12345
Como se muestra a continuacion:






Como cambiar el tipo de letra (fuente) en una aplicacion movil para Android en Android Studio



En este post mostraremos como cambiar el tipo de fuente o tipo de letra de los Botones, EditText y TextView en una aplicacion movil en Android desde Android Studio. Esto es necesario cuando queremos crear una aplicacion movil personalizada y dar un toque unico.

Primero descargamos los tipos de fuentes que queramos utilizar en nuestra aplicacion movil en formato .tff. Yo los descargo de: https://fonts.google.com/ y los colocamos dentro de la carpeta "fonts" (si no existe la creamos) dentro de "assets" en la ruta de la aplicacion. Quedando de la siguiente manera: "main/assets/fonts".

Para este ejemplo definimos el archivo de interfaz de usuario prueba.xml:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:background="@color/white">

<Button
    android:id="@+id/boton_prueba"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Boton de prueba"
    android:textSize="24sp"
/>

<EditText
    android:id="@+id/edit_text_prueba"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="EditText de prueba"
    android:textSize="24sp"
/>

<TextView
    android:id="@+id/text_view_prueba"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="TextView de prueba"
    android:textSize="24sp"
/>

</LinearLayout>



Luego, dentro del metodo onCreate() instanciamos los tipos de fuente agregados a la carpeta "fonts" previamente con la Clase "Typeface" y los definimos o seteamos para cada uno de los componentes del archivo prueba.xml definido anteriormente.


protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.prueba);

       Button nameButton = (Button) findViewById(R.id.boton_prueba);
       TextView nameTextView = (TextView) findViewById(R.id.text_view_prueba);
       EditText nameEditText = (EditText) findViewById(R.id.edit_text_prueba);
        
Typeface face = Typeface.createFromAsset(getAssets(), "fonts/JosefinSans-Regular.ttf");
Typeface faceBold = Typeface.createFromAsset(getAssets(), "fonts/JosefinSans-Bold.ttf");
Typeface faceSemiBold = Typeface.createFromAsset(getAssets(), "fonts/JosefinSans-SemiBold.ttf");

nameButton.setTypeface(face);
nameTextView.setTypeface(face);
        nameEditText.setTypeface(face);
}

Como alternar los colores de fondo en las filas de una lista (ListView) en Android



Cuando definimos listas en Android es muy comun encontrarnos con el problema de que los datos estan un poco desordenados y no se aprecian correctamente como deberian. Es por ello que algunos desarrolladores optan por colocar colores de fondo alternados a la lista para que la informacion se pueda apreciar de mejor manera.

Primero tendremos que definir la lista (ListView) en la interfaz de usuario .xml. Definiremos el archivo prueba.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:background="@color/white">

<ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/list_view_prueba"
 />

</LinearLayout>

Ahora en la clase respectiva se procede a instanciar la lista de la siguiente manera:

ListView listaPrueba = (ListView) findById(R.id.list_view_prueba);

Luego dentro del evento onCreate se realiza la colocacion de los colores de fondo de manera alternada:

protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.prueba);

        ListAdapter adaptador1 = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arrayItems){
                @Override
                public View getView(int position, View convertView, ViewGroup parent) {
                     View view = super.getView(position,convertView,parent);
                    if (position %2 == 1) {
                        view.setBackgroundColor(Color.parseColor("#26CCCCCC"));
                    } else {
                        view.setBackgroundColor(Color.parseColor("#00FFFFFF"));
                    }
                    return view;
                }
            };
           listaPrueba.setAdapter(adaptador1);

}


donde:

arrayItems es el array de elementos que estaran en la lista, por ejemplo:

String[] arrayItems = new String[]{"item1", "item2", "item3", "item4", "item5"};


Una vez realizado todo el proceso tendremos una lista con colores de fondo alternados para una mejor visualizacion de la informacion.