Documentos de Académico
Documentos de Profesional
Documentos de Cultura
<androidx.fragment.app.FragmentContainerView
android:id="@+id/fragmentContainerView2"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height=" match_parent""
app:defaultNavHost="true"
app:navGraph="@navigation/nav_graph"
tools:layout_editor_absoluteX="1dp"
tools:layout_editor_absoluteY="1dp"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
12. Aparecen en el código del nav_graph todas las reglas de navegación entre los
fragments. En los actions de los fragment se modifica el @+id de cada uno de ellos
con los nombres que se asocien a cada uno de los fragments:
<fragment
android:id="@+id/inicioFragment"
android:name="com.example.pruebanavigation.InicioFragment"
android:label="fragment_inicio"
tools:layout="@layout/fragment_inicio" >
<action
android:id="@+id/action_inicioFragment_to_pantalla1Fragment"
app:destination="@id/pantalla1Fragment" />
<action
android:id="@+id/action_inicioFragment_to_pantalla2Fragment"
app:destination="@id/pantalla2Fragment" />
</fragment>
POR
<fragment
android:id="@+id/inicioFragment"
android:name="com.example.pruebanavigation.InicioFragment"
android:label="fragment_inicio"
tools:layout="@layout/fragment_inicio" >
<action
android:id="@+id/idPantalla1"
app:destination="@id/pantalla1Fragment" />
<action
android:id="@+id/idPantalla2"
app:destination="@id/pantalla2Fragment" />
</fragment>
13. Se crea la lógica de los botones en el MainActivity, destinando OnCLickListener
para cada uno de los botones, generando el salto a cada uno de los fragments
asosciados a los botones:
public InicioFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup
container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View vista = inflater.inflate(R.layout.fragment_inicio,
container, false);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
findNavController(v).navigate(R.id.idPantalla1);
}
});
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
findNavController(v).navigate(R.id.idPantalla2);
}
});
return vista;
}
}
<androidx.fragment.app.FragmentContainerView
android:id="@+id/fragmentContainerView2"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height=" match_parent""
app:defaultNavHost="true"
app:navGraph="@navigation/nav_graph"
tools:layout_editor_absoluteX="1dp"
tools:layout_editor_absoluteY="1dp"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
12. Una vez terminado el proceso anterior, el sistema genera las acciones dentro de
nav_graph para cada uno de los fragments asociados:
<fragment
android:id="@+id/inicioFragment"
android:name="com.example.navigationapplication.InicioFragment"
android:label="fragment_inicio"
tools:layout="@layout/fragment_inicio" >
<action
android:id="@+id/action_inicioFragment_to_primerFragment"
app:destination="@id/primerFragment"
app:enterAnim="@android:anim/accelerate_interpolator"
app:popEnterAnim="@android:anim/bounce_interpolator"
app:popUpToInclusive="true" />
<action
android:id="@+id/action_inicioFragment_to_segundoFragment"
app:destination="@id/segundoFragment" />
</fragment>
<fragment
android:id="@+id/primerFragment"
android:name="com.example.navigationapplication.PrimerFragment"
android:label="fragment_primer"
tools:layout="@layout/fragment_primer" >
<action
android:id="@+id/action_primerFragment_to_inicioFragment"
app:destination="@id/inicioFragment" />
</fragment>
<fragment
android:id="@+id/segundoFragment"
android:name="com.example.navigationapplication.SegundoFragment"
android:label="fragment_segundo"
tools:layout="@layout/fragment_segundo" >
<action
android:id="@+id/action_segundoFragment_to_tercerFragment"
app:destination="@id/tercerFragment" />
<action
android:id="@+id/action_segundoFragment_to_inicioFragment"
app:destination="@id/inicioFragment" />
</fragment>
<fragment
android:id="@+id/tercerFragment"
android:name="com.example.navigationapplication.TercerFragment"
android:label="fragment_tercer"
tools:layout="@layout/fragment_tercer" >
<action
android:id="@+id/action_tercerFragment_to_segundoFragment"
app:destination="@id/segundoFragment" />
<action
android:id="@+id/action_tercerFragment_to_inicioFragment"
app:destination="@id/inicioFragment" />
</fragment>
13. Luego se definen los procedimientos dentro de cada uno de los Fragments en su
sección Java, primero generando el @Override de onViewCreated, así:
InicioFragment
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//Forma 2
final NavController navController = Navigation.findNavController(view);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Navigation.findNavController(v).navigate(R.id.primerFragment);
}
});
//Forma 2
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
navController.navigate(R.id.segundoFragment);
}
});
}
PrimerFragment
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Button btnAtras = view.findViewById(R.id.btnAtras);
//Forma 2
final NavController navController = Navigation.findNavController(view);
btnAtras.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Navigation.findNavController(v).navigate(R.id.inicioFragment);
}
});
}
SegundoFragment
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//Forma 2
final NavController navController = Navigation.findNavController(view);
btnAtras.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Navigation.findNavController(v).navigate(R.id.inicioFragment);
}
});
}
TercerFragment
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//Forma 2
final NavController navController = Navigation.findNavController(view);
btnAtras.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Navigation.findNavController(v).navigate(R.id.segundoFragment);
}
});
//Forma 2
btnInicio.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
navController.navigate(R.id.inicioFragment);
}
});
}
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_home"
android:icon="@drawable/ic_menu_camera"
android:title="@string/menu_home" />
<item
android:id="@+id/nav_gallery"
android:icon="@drawable/ic_menu_gallery"
android:title="@string/menu_gallery" />
<item
android:id="@+id/nav_slideshow"
android:icon="@drawable/ic_menu_slideshow"
android:title="@string/menu_slideshow" />
<item
android:id="@+id/greenFragment"
android:icon="@drawable/share2"
android:title="Green Fragment" />
</group>
navigationView.setItemIconTintList(null);
8. Ejecutar la App.
Recycler View
Para poder lograr el desarrollo de una aplicación con RecyclerView, se debe proceder con
los siguientes pasos:
1. Se crea la aplicación con un Activity Blank. Luego se define el Layout que más
convenga con la aplicación.
2. Se agrega un contenedor RecyclerView dentro del archivo XML.
3. Luego, se definen los elementos que contendrá el RecyclerView. En el caso de este
ejemplo, se definen en el MainActivity.Java las estructuras de los arrays que
contendrán los datos:
float[] precios = {2500, 3500, 1850, 1200, 3000, 4500, 4300, 3400, 2100, 3670} ;
4. Definir los controles visuales que van a emplearse para mostrar cada elemento de
la estructura de datos. Se hace creando dentro de la carpeta layout en resources,
un archivo XML que contendrá el layout modelo (Figura 6):
float[] precios = {2500, 3500, 1850, 1200, 3000, 4500, 4300, 3400, 2100, 3670} ;
RecyclerView rv1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rv1 = findViewById(R.id.recyclerView);
rv1.setLayoutManager(linearLayoutManager);
rv1.setAdapter(new AdaptadorFrutas());
}
@NonNull
@Override
public AdaptadorFrutasHolder onCreateViewHolder(@NonNull ViewGroup parent, int
viewType) {
return new
AdaptadorFrutasHolder(getLayoutInflater() .inflate(R.layout.itemfruta, parent, false));
}
@Override
public void onBindViewHolder(@NonNull AdaptadorFrutasHolder holder, int
position) {
holder.imprimir(position);
}
@Override
public int getItemCount() {
return nombres.length;
}
iv1 = itemView.findViewById(R.id.imageView);
tv1 = itemView.findViewById(R.id.tvNombre);
tv2 = itemView.findViewById(R.id.tvPrecio);
itemView.setOnClickListener(this);
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, nombres[getLayoutPosition()] + "\n" +
precios[getLayoutPosition()], Toast.LENGTH_LONG).show();
}
}
}
}
RecyclerView – Agregar y Eliminar Items
public Persona(){
}
3. Luego se debe definir el ArrayList de la clase creada que contenga los datos
iniciales de dicho Array.
4. Crear un LinearLayoutManager para mostrar los ítems en forma vertical.
5. Crear una clase que herede de RecyclerView.Adapter e implemente los métodos
onCreateViewHolder, onBindViewHolder y getItemCount:
6. Plantear una clase que herede de la clase RecyclerView.ViewHolder e
implementar el constructor, recuperar la referencia de los controles visuales del
layout creado en el punto 3 y proceder a actualizar la pantalla para cada item de la
lista:
ArrayList<Persona> personas;
RecyclerView rv1;
EditText et1, et2;
AdaptadorPersona ap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rv1 = findViewById(R.id.rv1);
et1 = findViewById(R.id.et1);
et2 = findViewById(R.id.et2);
rv1.setLayoutManager(uno);
ap = new AdaptadorPersona();
rv1.setAdapter(ap);
}
et1.setText("");
et2.setText("");
//Actualiza la pantalla
ap.notifyDataSetChanged();
rv1.scrollToPosition(personas.size() - 1);
}
if (pos != -1){
personas.remove(pos);
ap.notifyDataSetChanged();
if (personas.size()>=0){
rv1.scrollToPosition(0);
}
}
}
}
@NonNull
@Override
public AdaptadorPersonaHolder onCreateViewHolder(@NonNull ViewGroup parent,
int viewType) {
return new
AdaptadorPersonaHolder(getLayoutInflater().inflate(R.layout.itempersona, parent,
false));
}
@Override
public void onBindViewHolder(@NonNull AdaptadorPersonaHolder holder, int
position) {
holder.imprimir(position);
}
@Override
public int getItemCount() {
return personas.size();
}
}
tv1 = itemView.findViewById(R.id.tvnombre);
tv2 = itemView.findViewById(R.id.tvtelefono);
itemView.setOnClickListener(this);
@Override
public void onClick(View v) {
mostrar(getLayoutPosition());
7. Crear los controles de botones de Agregar y Eliminar, que generan sus respectivos
onClick. En el caso de agregar, es simplemente la función add, y en el caso de
eliminar, se debe proceder a definir la posición del registro a borrar y luego,
proceder a la función remove.
8. Ejecutar la aplicación.
Procedimientos con Activity
et1 = findViewById(R.id.txtNumero1);
et2 = findViewById(R.id.txtNumero2);
sp1 = findViewById(R.id.spOperaciones);
intent.putExtra("valor1", valor1);
intent.putExtra("valor2", valor2);
intent.putExtra("operacion", operacion);
et1.setText("");
et2.setText("");
sp1.setSelection(0);
startActivity(intent); }
3. Luego, dentro de la Activity receptora de los datos, se define el Bundle o montón
que va a recibir los valores parametrizados, y los coloca en variables que se
requieran definir para recibirlos:
tv1 = findViewById(R.id.tv1);
double resultado = 0;
switch (op) {
case "Sumar":
resultado = valor1 + valor2;
tv1.setText(valor1 + " + " + valor2 + " = " + resultado);
break;
case "Restar":
resultado = valor1 - valor2;
tv1.setText(valor1 + " - " + valor2 + " = " + resultado);
break;
case "Multiplicar":
resultado = valor1 * valor2;
tv1.setText(valor1 + " x " + valor2 + " = " + resultado);
break;
case "Dividir":
resultado = valor1 / valor2;
tv1.setText(valor1 + " ÷ " + valor2 + " = " + resultado);
break;
}
}
if(resultCode == Activity.RESULT_CANCELED){
tv1.setText("Datos Usuario");
Toast.makeText(this, "Se presionó el botón CANCELAR",
Toast.LENGTH_SHORT).show();
}
}
}
}
Creación y lectura de archivos de texto en la memoria
interna
Se utiliza para la creación de archivos de texto y almacenar datos dentro del mismo, como
efecto del desarrollo mismo de la aplicación. Hay que tener en cuenta dos puntos:
Ejemplo: Desarrollar una interfaz visual que permita ingresar el nombre de un archivo de
texto y su contenido, al presionar un botón, almacenar los datos en un archivo de texto e
implementar el algoritmo para la lectura de archivos de texto.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et1 = findViewById(R.id.txtNombreAtchivo);
et2 = findViewById(R.id.txtMultiLine);
try{
OutputStreamWriter archivo = new
OutputStreamWriter(openFileOutput(nombrearchivo, Context.MODE_PRIVATE));
archivo.write(contenido);
archivo.flush();
archivo.close();
et1.setText("");
et2.setText("");
Ejemplo: Se desarrolla una Agenda de Actividades Diarias, donde se registra en una fecha
dada, la hora y la Actividad a realizar. El sistema permite cargar al texto multilínea todo lo
referente a todas las actividades diarias a registrar y luego, grabarlas en la memoria.
También permite la búsqueda de la Agenda por fecha.
3. Se crea el onClick para el botón grabar(), donde se especifica que existe una clase
creada de SharedPreference, en la cual se especifica el nombre del archivo XML
que contendrá la información y se coloca en modo Privado, con el fin de que el
sistema permita la grabación de datos. Luego se define el Editor de
SharedPreferences y se colocan dentro de este las variables (fecha y actividades).
4. Se crea el onClick para el botón buscar(), que permite colocar la fecha que se
desea buscar y coloca el valor en SharedPreferences. Luego, se colocan los datos
en cada uno de los EditText y el texto multilínea:
public void buscar(View view) {
SharedPreferences sp = getSharedPreferences("agenda2", Context.MODE_PRIVATE);
String dato = sp.getString(et1.getText().toString(), "");
if (dato.equals("")){
Toast.makeText(this, "No hay Actividad Registrada \nen la Fecha " +
et1.getText().toString(), Toast.LENGTH_LONG).show();
}else{
etagenda.setText(dato);
actividades = etagenda.getText().toString();
}
}
package com.example.appsqlite2.utilidades;
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(Utilidades.CREAR_TABLA_VEHICULO);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS vehiculos" + Utilidades.TABLA_VEHICULO);
onCreate(db);
}
}
4. Se crean los componentes de la pantalla del Main Activity que contienen los datos
del registro. Se agrega el botón “Registrar” el cual lleva asociado el onClick
registrar.
5. Se procede a abrir una conexión SQLite y abriendo la base de datos en formato de
escritura. Luego se establece una variable de la clase ContentValues, y se colocan
los valores determinando primero la variable y luego el valor. Finalmente se utiliza
el comando db.insert() para grabar un registro nuevo:
txtplaca.setText("");
txtmarca.setText("");
txtmodelo.setText("");
txtprecio.setText("");
try {
Cursor cursor = db.query(Utilidades.TABLA_VEHICULO, campos,
Utilidades.CAMPO_PLACA + "=?", parametros, null, null, null);
cursor.moveToFirst();
txtmarca.setText(cursor.getString(0));
txtmodelo.setText(cursor.getString(1));
txtprecio.setText(cursor.getString(2));
cursor.close();
7. La otra sección del CRUD es borrar(), que utiliza los mismos conceptos para la
búsqueda, pero adicionalmente al query, se ejecuta la acción de borrado:
8. Y la última seción del CRUS es actualizar(), que permite modificar los datos
mediante un procedimiento similar al insert(), como lo es ContentValues:
INSERTAR:
private void registrarUsuariosSQL() {
ConexionSQLiteHelper conn = new ConexionSQLiteHelper(this, "bd_clientes.db",
null,1);
try {
db = conn.getWritableDatabase();
//INSERT INTO usuarios (id, nombre, telefono) VALUES (1234,'PEDRO',
'34554433')
String insertar = "INSERT INTO " + Utilidades.TABLA_USUARIO + " (" +
Utilidades.CAMPO_ID +
", " + Utilidades.CAMPO_NOMBRE + ", " + Utilidades.CAMPO_TELEFONO +
") VALUES (" +
campoId.getText().toString() + ", '" +
campoNombre.getText().toString() + "','" +
campoTelefono.getText().toString() + ")";
db.execSQL(insertar);
db.close();
}catch (Exception e){
if(db.isOpen()){
db.close();
}
}
}
BUSCAR:
private void consultarSQL() {
SQLiteDatabase db = conn.getReadableDatabase();
String[] param = {campoId.getText().toString()};
try {
//SELECT nombre, telefono FROM usuarios WHERE codigo = ?
Cursor cursor = db.rawQuery("SELECT " + Utilidades.CAMPO_NOMBRE + ", " +
Utilidades.CAMPO_TELEFONO + " FROM " + Utilidades.TABLA_USUARIO + " WHERE " +
Utilidades.CAMPO_ID + "=?", param);
cursor.moveToFirst();
campoNombre.setText(cursor.getString(0));
campoTelefono.setText(cursor.getString(1));
cursor.close();
db.close();
NOTA:
Para mostrar una variable en un formato numérico se utiliza la siguiente rutina para
Android:
Ejemplo: implementar una aplicación que contenga diferentes layouts que muestren al
desplazar horizontalmente de derecha a izquierda o viceversa, las diferentes banderas
suramericanas:
String[] paises =
{"Argentina","Bolivia","Brasil","Chile","Colombia","Ecuador","Paraguay","Perú","Urug
uay","Venezuela"};
int [] fotos = {R.drawable.argentina, R.drawable.bolivia, R.drawable.brasil,
R.drawable.chile, R.drawable.colombia,
R.drawable.ecuador, R.drawable.paraguay, R.drawable.peru,
R.drawable.uruguay, R.drawable.venezuela};
ViewPager2 vp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vp = findViewById(R.id.vp);
vp.setAdapter(new AdaptadorPaises());
4. Se crea una inner class con el nombre asignado en el Adaptador, haciendo extends
a un Adaptador del RecyclerView que contendrá los Paises
(AdaptadorPaisesHolder) y se implementan sus tres métodos obligatorios.
5. Dentro de esta clase Adaptador Paises se crea otra subclase
AdaptadorPaisesHolder con extends a RecyclerView.ViewHolder. Luego se define
el método constructor super. Dentro de este se definen las partes del layout que
contienen el nombre del país y la imagen de la bandera:
private class AdaptadorPaises extends
RecyclerView.Adapter<AdaptadorPaises.AdaptadorPaisHolder> {
@NonNull
@Override
public AdaptadorPaisHolder onCreateViewHolder(@NonNull ViewGroup parent, int
viewType) {
return new AdaptadorPaisHolder(getLayoutInflater().inflate
(R.layout.layoutpais, parent, false));
}
@Override
public void onBindViewHolder(@NonNull AdaptadorPaisHolder holder, int position)
{
holder.imprimir(position);
}
@Override
public int getItemCount() {
return paises.length;
}
ImageView iv1;
TextView tv1;
iv1 = itemView.findViewById(R.id.ivPais);
tv1 = itemView.findViewById(R.id.tvPais);
}
vp.setOrientation(ViewPager2.ORIENTATION_VERTICAL);
Controles TabLayout y ViewPager2
El control TabLayout muestra una serie de pestañas que al vincularlo con el ViewPager2
permite desplazarse entre las vistas del ViewPager2 sin tener que deslizar los dedos de
izquierda a derecha. Disponer de un TabLayout en la parte superior de la pantalla permite
crear un aplicación más ordenada y accesible.
String [] dias =
{"Lunes","Martes","Miércoles","_Jueves","Viernes","Sábado","Domingo"};
String [] actividades = {"","","","","","",""};
ViewPager2 vp2;
TabLayout tablayout1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vp2 = findViewById(R.id.viewpager2);
tablayout1 = findViewById(R.id.tablayout1);
vp2.setAdapter(new AdaptadorAgenda());
@NonNull
@Override
public AdaptadorAgendaHolder onCreateViewHolder(@NonNull ViewGroup parent,
int viewType) {
return new
AdaptadorAgendaHolder(getLayoutInflater().inflate(R.layout.layoutdia, parent,
false));
}
@Override
public void onBindViewHolder(@NonNull AdaptadorAgendaHolder holder, int
position) {
holder.imprimir(position);
}
@Override
public int getItemCount() {
return dias.length;
}
EditText et1;
et1 = itemView.findViewById(R.id.etActividades);
et1.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
actividades[getLayoutPosition()] = et1.getText().toString();
return false;
}
});
}
7. Luego, hay que tener en cuenta actualizar constantemente, cada vez que se
modifique el EditText Multiline, tome la posición del día y en esa posición grabe la
actividad en la matriz de actividades.
et1 = itemView.findViewById(R.id.etActividades);
et1.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
actividades[getLayoutPosition()] = et1.getText().toString();
return false;
8. Para que los días no queden amontonados en la pantalla, se va al XML del
MainActivity, se selecciona el TabLayout y se va al atributo tabMode y se modifica
de fixed a scrollable.
9. Para guardar las actividades, se debe implementar el método onPause, el cual
permite que cada vez que se salga de la aplicación, salga de la actividad o se
ingrese a otra, el sistema permitirá grabar los contenidos de las actividades en un
archivo SharedPreferences, el cual mediante la posición del día y la actividad
registra el contenido. A su vez cuando se ingresa a la aplicación o actividad, el
sistema revisa en el onCreate si existe el archivo con formato SharedPreferences y
coloca en cada día la actividad de cada uno.
Dentro de onPause()
@Override
protected void onPause() {
super.onPause();
SharedPreferences preferencias = getSharedPreferences("agenda",
Context.MODE_PRIVATE);
SharedPreferences.Editor editor1 = preferencias.edit();
for (int f=0; f<dias.length; f++){
editor1.putString(dias[f], actividades[f]);
}
editor1.commit();
}
Dentro de onCreate()
SharedPreferences preferencias = getSharedPreferences("agenda",
Context.MODE_PRIVATE);
for (int f=0; f<dias.length; f++){
String acti = preferencias.getString(dias[f], "");
actividades[f] = acti;
}
Menú de Opciones en la Barra del Titulo
En el Menú de Opciones de la barra del Título se deben ubicar las acciones globales de la
aplicación, como pueden ser: configuración de la aplicación, búsquedas, cerrar la
aplicación, etc.
También forman parte del menú de opciones los íconos que aparecen a la izquierda de los
tres puntos verticales encargados de mostrar el menú desplegable.
6. Posterior a esto, se debe capturar el click de cada uno de los ítems del menú, para
poder ejecutar la actividad. Para ello se declaran los componentes en el
MainActivity que va a utilizar la aplicación y luego se agrega el @Override Method
onOptionsItemSelected.
7. Dentro de este método se declara un entero que contiene el número del ítem
seleccionado. Dependiendo de este número se establece la acción a seguir. Se
debe tener en cuenta que cuando existe un return no se coloca break dentro del
case, y debe existir la opción default que lo devuelve al método padre
onOptionsItemSelected dirigido al item original:
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
int nro = item.getItemId();
float valor;
switch (nro){
case (R.id.agrandarfuente):
valor = tv1.getTextSize();
valor += 20;
tv1.setTextSize(TypedValue.COMPLEX_UNIT_PX, valor);
return true;
case (R.id.reducirfuente):
valor = tv1.getTextSize();
valor -= 20;
tv1.setTextSize(TypedValue.COMPLEX_UNIT_PX, valor);
return true;
case (R.id.salir):
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}