Componentes en Android
Componentes de la interfaz gráfica en Android
Android dispone de múltiples elementos que componen la aplicación como pueden ser botones, campos de texto, desplegables, etc... Estos componentes son creados en código xml y disponen de atributos que permiten configurar las características de dicho elemento. A continuación se muestra la implementación de algunos de los componentes más básicos.
TextView
Este componente es el indicado para mostrar texto, es el equivalente a una etiqueta en html.
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
Nota: Los atributos de tipo constraint pertenecen a un layout Constraint.
AutoCompleteTextView
Este componente es un TextView pero con la característica añadida de autocompletado. Es necesario relacionar los datos para dicha acción ya sea mediante código Java o xml y la ayuda del adaptador ArrayAdapter.
activity.xml
<AutoCompleteTextView
android:id="@+id/autocomplete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Componentes"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
Activity.java
public class MainActivity extends AppCompatActivity {
AutoCompleteTextView autocomplete;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
autocomplete = (AutoCompleteTextView) findViewById(R.id.autocomplete);
String [] componentes = getResources().getStringArray(R.array.componentes);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,componentes);
autocomplete.setAdapter(adapter);
}
}
string.xml (datos fuente)
<resources>
<string name="app_name">EditTextAutoComplete</string>
<string-array name="componentes">
<item>Monitor</item>
<item>USB</item>
<item>Tarjeta Gráfica</item>
<item>Procesador</item>
<item>Disco Duro</item>
<item>Torre</item>
<item>Placa Base</item>
<item>Ventilador</item>
</string-array>
</resources>
EditText
El campo de texto o caja de texto es el componente indicado para introducir datos. Es el elemento más utilizado en formularios y es el equivalente a un input en html. La caja de texto es configurable mediante el atributo inputType en el que su valor puede variar según el tipo de dato a introducir, es decir, la caja puede estar definida para introducir un tipo de dato numérico, un tipo de dato fecha, un tipo de dato correo... Este valor puede atribuir pequeñas características distintas, como pueden ser la visualización directa del teclado númerico o un tipo de teclado que incluye el símbolo de la arroba. Otro atributo destacable es el atributo password que acepta los valores true o false permitiendo ocultar los caracteres introducidos de la contraseña.
<EditText
android:id="@+id/editTextTarea"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="96dp"
android:text=" "
android:inputType="textPersonName"
android:password="true"
/>
Button
Un botón es un tipo de elemento que permite interactuar con el usuario y que generalmente realiza algún tipo de acción.
<Button
android:id="@+id/Enviar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
CheckBox
Las cajas de chequeo o de verificación permiten marcar o desmarcar opciones sin que se mantenga ninguna relación una opción respecto a otra.
<CheckBox
android:id="@+id/checkbox1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hombre"
/>
Spinner
Un spinner es un elemento similar a un botón que al accionarlo despliega un conjunto de opciones (también denominadas items), es el equivalente al elemento select en html.
<Spinner
android:id="@+id/spinner"
android:layout_width="368dp"
android:layout_height="wrap_content"
android:layout_marginBottom="134dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="97dp">
ListView
Este elemento está formado por una lista que contiene un item o un conjunto de items que pueden ser personalizables y que permite incluir un gran número de elementos ordenados de arriba hacia abajo.
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
</ListView>
ImageView
Es uno de los elementos más utilizado para mostrar imágenes en una vista o activity. Las imágenes se almacenan dentro de la carpeta drawable que contiene los distintos directorios que corresponden a las distintas resoluciones (-dpi,-mdpi,-hdpi,...etc) manteniendo el mismo nombre de imagen en todos ellos.
<ImageView
android:id="@+id/imagen"
android:layout_width="200px"
android:layout_height="200px"
android:src="@drawable/imagen"
/>
Independientemente de que exista una imagen asignada es posible sobrescribir la imagen desde la clase.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imagen = (ImageView) findViewById(R.id.imagen);
image.setImageResource(R.drawable.imagen_alternativa
}
}
ScrollView
El ScrollView es un elemento similar al ListView pero permite contener distintos elementos y poder desplazarse por todos los elementos haciendo uso de la función táctil del dispositivo.
<ScrollView xmlns:android="//schemas.android.com/apk/res/android"
xmlns:app="//schemas.android.com/apk/res-auto"
xmlns:tools="//schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<EditText
android:id="@+id/id"
android:hint="ID"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<EditText
android:id="@+id/nombre"
android:hint="Nombre"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<EditText
android:id="@+id/apellido"
android:hint="Apellido"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</ScrollView>
HorizontalView
Este elemento es igual al elemento anterior ScrollView pero mostrando los elementos en sentido horizontal. Es necesario sustituir el atributo orientation a horizontal, y a su vez permite mostrar o no la barra de scroll mediante el atributo scrollbars.
<LinearLayout xmlns:android="//schemas.android.com/apk/res/android"
xmlns:app="//schemas.android.com/apk/res-auto"
xmlns:tools="//schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="none"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<EditText
android:id="@+id/id"
android:hint="ID"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<EditText
android:id="@+id/nombre"
android:hint="Nombre"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<EditText
android:id="@+id/apellido"
android:hint="Apellido"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</HorizontalScrollView>
</LinearLayout>
Toast
Elemento en forma de mensaje flotante que aparece de forma temporal indicando alguna información.
Toast.makeText(getApplicationContext(), "Mensaje Toast", Toast.LENGTH_SHORT).show();
WebView
Elemento representado por un navegador nativo de Android que permite mostrar algún servicio o página web en una activity y que además permite configurar un conjunto de opciones relacionadas con el navegador como pueden ser la activación de Javascript con setJavascriptEnabled() o enlazar a la ruta anterior utilizando el historial del navegador con goBack(),etc.. Se puede ampliar la información aquí.
activity_main.xml
<WebView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/navegador"
/>
MainActivity.java
WebView webview;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webview = (WebView)findViewById(R.id.navegador);
webview.loadUrl("//bahiaxip.com");
}
MainActivity.java (WebView con opciones)
WebView webview;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webview = (WebView)findViewById(R.id.navegador);
webview.getSettings().setJavascriptEnabled(true);
webview.getSettings().setBuiltInZoomControls(true);
webview.loadUrl("//bahiaxip.com");
webview.setWebViewClient(new WebViewClient(){
public boolean shouldOverrideUrlLoading(WebView view, String url){
return false;
}
});
}
El elemento WebView requiere permisos de acceso a internet.
DatePicker
Es un elemento predefinido por Android que permite seleccionar una fecha (día, mes, año) y almacenarla en una variable o en otro elemento, para después poder realizar algún tipo de acción.
A continuación un ejemplo básico de DatePicker
archivo xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="//schemas.android.com/apk/res/android"
xmlns:app="//schemas.android.com/apk/res-auto"
xmlns:tools="//schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="xip.midominio.com.datepicker.MainActivity">
<TextView
android:id="@+id/texto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/boton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Enviar"
/>
</android.support.constraint.ConstraintLayout>
archivo java
package xip.midominio.com.datepicker;
import android.app.DatePickerDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;
import android.view.View.OnClickListener;
import java.util.Calendar;
public class MainActivity extends AppCompatActivity implements OnClickListener {
TextView texto;
Button boton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
texto = (TextView) findViewById(R.id.texto);
boton = (Button) findViewById(R.id.boton);
boton.setOnClickListener(this);
}
public void onClick(View v){
switch(v.getId()){
case R.id.boton:
final Calendar c = Calendar.getInstance();
int mYear = c.get(Calendar.YEAR);
int mMonth = c.get(Calendar.MONTH);
int mDay = c.get(Calendar.DAY_OF_MONTH);
DatePickerDialog dpd = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker datePicker, int year, int month, int day) {
texto.setText(day+"-"+month+"-"+year);
}
},mYear,mMonth,mDay);
dpd.show();
break;
default:
break;
}
}
}
TimePicker
Es el mismo elemento que DatePicker pero permite establecer la hora (horas y minutos) en lugar de la fecha.
A continuación un ejemplo de TimePicker manteniendo el mismo código xml que el ejemplo DatePicker.
package xip.midominio.com.datepicker;
import android.app.DatePickerDialog;
import android.app.TimePickerDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;
import android.view.View.OnClickListener;
import android.widget.TimePicker;
import java.util.Calendar;
public class MainActivity extends AppCompatActivity implements OnClickListener {
TextView texto;
Button boton;
int mHour,mMinute;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
texto = (TextView) findViewById(R.id.texto);
boton = (Button) findViewById(R.id.boton);
boton.setOnClickListener(this);
}
public void onClick(View v){
switch(v.getId()){
case R.id.boton:
TimePickerDialog tpd = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int hour, int minute) {
texto.setText(hour+":"+minute);
}
},mHour,mMinute,false);
tpd.show();
break;
default:
break;
}
}
}
Para poder comentar es necesario iniciar sesión