6 semanas de desarrollo de aplicaciones para Android: aprendizaje basado en proyectos GRATIS

¿Estás entre los que quieren aprender Desarrollo de aplicaciones Android desde el principio? ¿Eres alguien que no tiene idea sobre el desarrollo de aplicaciones Android? O acabas de empezar tu viaje, pero no sabes si estás en el camino correcto o no. Entonces, durante su viaje inicial, todo lo que necesita es una guía adecuada. Si obtiene su guía, entonces está listo para comenzar. Sí, por eso hemos preparado un artículo completo sobre esto. Para ayudarlo con esto, hemos creado una hoja de ruta práctica para » 6 semanas de desarrollo de aplicaciones Android: aprendizaje basado en proyectos «. Aprenderemos desarrollo de aplicaciones de Android mediante el desarrollo de 6 proyectos de Android . Como se dijo anteriormente en este artículo, la mejor manera de convertirse en desarrollador de Android: una hoja de ruta completa

La mejor manera de aprender Android es desarrollando algunos proyectos básicos para algunos proyectos avanzados.

Android Development Complete Tutorial

Este artículo está diseñado de tal manera que vas a aprender conceptos de Android cada semana mediante el desarrollo de un proyecto que también se conoce como » Proyecto de aprendizaje de bases «. Este aprendizaje le brindará las pautas completas para desarrollar un sólido conocimiento conceptual en Android y lograr su objetivo de desarrollador de Android. 

Requisito previo

Por lo tanto, el primer requisito previo para ingresar al Mundo de desarrollo de Android es su » Dedicación » y » Motivación » hacia el aprendizaje y la creación de increíbles aplicaciones de Android. Sí, eso es verdad. Primero, encuentre una razón poderosa por la que está ingresando a este mundo. Por ejemplo, está practicando la estructura de datos y los algoritmos, día y noche, porque va a conseguir un trabajo en una de las principales empresas basadas en productos. Del mismo modo, pregúntese: “ ¿Por qué Android? ¿Por qué no Desarrollo Web? ¿Por qué no ciencia de datos y aprendizaje automático? Si encuentra la respuesta, nadie podrá impedir que aprenda el desarrollo de aplicaciones para Android. 

El segundo es el lenguaje de programación . En Android, la programación se realiza en dos lenguajes: JAVA o Kotlin y XML (Extension Markup Language). El archivo XML se ocupa del diseño, la presentación, los diseños, el plano, etc. (como front-end), mientras que JAVA o KOTLIN se ocupa del funcionamiento de los botones, las variables, el almacenamiento, etc. (como back-end). Entonces, todo lo que necesita es tener conocimientos de Java o Kotlin y XML. 

Nota : hemos preparado este tutorial en los lenguajes Java y Kotlin . (3 Proyectos en Java y 3 Proyectos en Kotlin). 

Algunos enlaces de recursos de aprendizaje útiles están disponibles en GeeksforGeeks:

¿Por qué Android nativo? ¿Por qué no una aplicación híbrida?

Una aplicación nativa es una aplicación para teléfonos inteligentes desarrollada específicamente para sistemas operativos móviles como Java/Kotlin para Android y Swift para iOS. Dado que la aplicación se desarrolla dentro del ecosistema maduro, los usuarios técnicos y la experiencia de las pautas del usuario proporcionadas por el propio sistema operativo, como los gestos de deslizamiento o la alineación en el lado izquierdo del centro, para Android e iOS. Ahora, por supuesto, ofrecen la experiencia más rápida, confiable y receptiva para el usuario. La aplicación tendrá la apariencia y la consistencia de la mayoría de las aplicaciones nativas que están integradas en los dispositivos. Las aplicaciones nativas tienen la ventaja significativa de acceder y utilizar fácilmente las capacidades integradas de los dispositivos del usuario. Por ejemplo, GPS, tal vez tu libreta de direcciones o tu cámara, y muchas otras cosas. 

Bueno, por otro lado, si hablamos de las aplicaciones híbridas, están en el paquete principal del sitio web envuelto en un envoltorio nativo, a veces PhoneGap u otros. Se ven y se sienten como una aplicación nativa pero, en última instancia, fuera del marco básico de la aplicación. Están alimentados por el propio sitio web de la empresa. Por ejemplo, sitios como Facebook o Netflix realmente no tienen sentido para tener una plataforma de aplicación nativa o incluso volver a compilar su aplicación para una sola función. Tomará mucho tiempo y es demasiado pesado, por lo que realmente tiene sentido para ellos comenzar con la aplicación híbrida. Ahora, las aplicaciones híbridas también pueden usar funciones nativas como la cámara y el GPS, pero a través de algunos complementos de terceros, se debe incluir una gran cantidad de código, mientras que, por otro lado, las aplicaciones nativas son bastante fáciles de usar. esas funcionalidades,   

En el mundo de la industria real, lo que sucede es que, si está comenzando su carrera en una empresa nueva que trabaja en aplicaciones híbridas, y cuando la empresa está financiada y el tamaño del equipo aumenta, generalmente cambian al desarrollo de aplicaciones nativas. Además, tenga en cuenta que el punto de vista salarial de los desarrolladores de aplicaciones nativas es en realidad un poco más alto y está por encima de los desarrolladores de aplicaciones híbridas.  

¿Quién puede aprender el desarrollo de aplicaciones de Android?

Grado No Importa ”, ¡¡Sí!! Si está haciendo B.Sc (Ciencias de la computación), BCA o cualquier otro título, también puede aprender Desarrollo de aplicaciones de Android. Todo lo que necesita es » Habilidades de codificación «. En el desarrollo de Android no hay necesidad de un conocimiento profundo en estructura de datos y algoritmos, solo tiene que aprender Java/Kotlin de antemano para ser un mejor desarrollador de aplicaciones de Android. 

Requisitos del sistema (Windows | Mac | Linux)

Para ventanas:

  • Microsoft Windows 7/8/10 (32 bits o 64 bits)
  • 4 GB de RAM como mínimo, se recomiendan 8 GB de RAM (más 1 GB para el emulador de Android)
  • 2 GB de espacio en disco disponible como mínimo, se recomiendan 4 GB (500 MB para IDE más 1,5 GB para Android SDK e imagen del sistema del emulador)
  • Resolución de pantalla mínima de 1280 x 800

Para Mac: 

  • Mac OS X 10.10 (Yosemite) o superior, hasta 10.13 (High Sierra)
  • 4 GB de RAM como mínimo, se recomiendan 8 GB de RAM (más 1 GB para el emulador de Android)
  • 2 GB de espacio en disco disponible como mínimo, se recomiendan 4 GB (500 MB para IDE más 1,5 GB para Android SDK e imagen del sistema del emulador)
  • Resolución de pantalla mínima de 1280 x 800

Para Linux:

  • Escritorio GNOME o KDE. Probado en Ubuntu 14.04 LTS, Trusty Tahr (distribución de 64 bits capaz de ejecutar aplicaciones de 32 bits)
  • Distribución de 64 bits capaz de ejecutar aplicaciones de 32 bits
  • Biblioteca GNU C (glibc) 2.19 o posterior
  • 4 GB de RAM como mínimo, se recomiendan 8 GB de RAM (más 1 GB para el emulador de Android)
  • 2 GB de espacio en disco disponible como mínimo, se recomiendan 4 GB (500 MB para IDE más 1,5 GB para Android SDK e imagen del sistema del emulador)
  • Resolución de pantalla mínima de 1280 x 800

¿Qué pasa después del desarrollo de aplicaciones para Android?

  • Implemente su idea única desarrollando una aplicación para Android.
  • Cree una aplicación de Android para sus proyectos universitarios menores y mayores.
  • Tome proyectos de Android independientes y gane dinero durante sus días universitarios.
  • Participa en Hackathon.
  • Solicitar Prácticas en diferentes empresas, etc.

Empecemos

Punto muy, muy importante: no copie y pegue el código por completo. Primero, trata de entender la lógica. Y juegue con él poniendo diferentes lógicas, valores, etc. Esto ayudará a aumentar su habilidad de desarrollo.

1ra semana

El día 1 de «6 semanas de desarrollo de aplicaciones Android», debe investigar y leer algunos blogs relacionados con Android y mantenerse motivado para el desarrollo de aplicaciones Android. Blogs como » La mejor manera de convertirse en desarrollador de Android: una hoja de ruta completa «, » Por qué Kotlin reemplazará a Java para el desarrollo de aplicaciones de Android «, » Datos interesantes sobre Android «, » Historia de Android «, » ¿Cómo funciona la aplicación de Android?» «, etc. 

Luego, en la primera semana de » 6 semanas de desarrollo de aplicaciones Android: aprendizaje basado en proyectos «, aprenderá cómo configurar un Android Studio para el desarrollo de aplicaciones Android, cómo crear un nuevo proyecto en Android Studio, cómo Ejecute su proyecto en un dispositivo real o emulador y también desarrollará dos aplicaciones básicas de Android en la primera semana. En esta parte, solo va a crear las siguientes dos aplicaciones de Android muy básicas

  1. La muy famosa aplicación de Android «Hello World»
  2. Aplicación de Android para sumar dos números 

¡¡Muy emocionado!! ¡Vamos a empezar!

Configuración de estudio de Android

Antes de configurar Android Studio, instálelo en su sistema.

Entonces, suponiendo que haya instalado con éxito Android Studio y ahora se encuentra en la pantalla a continuación.

Así que simplemente haga clic en » Crear nuevo proyecto » y en la siguiente pantalla, puede ver muchas actividades (marque esta palabra). Puede explorar cada actividad, pero para un principiante, elija Actividad vacía y avance más para un principiante  .

Aquí aprenderá el primer concepto importante en Android, es decir , Actividad . Puede consultar los siguientes artículos para tener una idea de qué es una actividad en Android. 

Ahora en la siguiente pantalla 

  • Nombre: escriba el nombre de su proyecto adecuado.
  • Nombre del paquete: Mantengámoslo por defecto.
  • Guardar ubicación: elija la ubicación donde desea guardar este proyecto.
  • Idioma: elige tu idioma entre Java y Kotlin
  • SDK mínimo (marque esta palabra) : como sabe, Android lanzó su versión a intervalos regulares de tiempo y proporciona algunas características nuevas en la última versión que no son compatibles con las versiones anteriores. Así que tienes que elegir a qué base de usuarios quieres llegar. Supongamos que selecciona «API 21: Android 5.0 (Lollipop)», luego puede ver «Su aplicación se ejecutará en aproximadamente el 94,1% de los dispositivos». De lo contrario, también puede hacer clic en el botón «Ayúdame a elegir».

Finalmente, haga clic en el botón Finalizar .

Aquí aprenderá el segundo concepto importante en Android, es decir , SDK . Puede consultar el siguiente artículo para tener una idea de qué SDK hay en Android.

Android SDK y sus componentes 

Después de hacer clic en el botón Finalizar, felicitaciones, el primer proyecto de Android Studio está listo. Inicialmente, muestra el consejo del día, que da consejos para mejorar la eficiencia del trabajo. Antes de ir a explorar Android Studio, familiarícese con la pantalla inicial que se muestra a continuación.

Para una mejor comprensión del entorno de Android Studio, se ha dividido en 4 partes:

1. Parte del menú: en esta sección, brinda opciones para crear un nuevo proyecto, abrir un proyecto de Android Studio existente, un botón para ejecutar la aplicación, menú desplegable para seleccionar el dispositivo deseado para ejecutar y probar una aplicación.

2. Área de codificación: esta sección permite escribir código para archivos como .xml, .java, .kt. Le permite abrir varios archivos a la vez en diferentes pestañas, pero le permite editar un archivo a la vez.

3. Estructura del Proyecto: Esta área nos permite explorar todos los archivos del proyecto. Hay varias vistas de la estructura. Android es una vista resumida de la jerarquía de la estructura del proyecto y Project es una vista detallada de la jerarquía del proyecto. Echa un vistazo a la siguiente imagen.

4. Parte de ejecución actual: una de las partes más importantes del entorno de Android Studio. Proporciona una vista detallada de la ejecución actual del proceso o actividad. Muestra qué errores, salidas de compilación, resultados de logcat, etc.

Comprender la parte de diseño

Todos los diseños de interfaz de usuario de la aplicación se pueden encontrar en el directorio res/layout. Estos son de la extensión .xml, responsables de construir las IU para la aplicación. Android Studio ofrece dos tipos de formas de diseñar la interfaz de usuario para las aplicaciones. Uno es Texto , donde se necesita diseñar la interfaz de usuario codificando y otro es la sección Diseño que proporciona un mecanismo conveniente de arrastrar y soltar para crear la interfaz de usuario. Eche un vistazo a la siguiente imagen que muestra cómo se escribe el código, luego muestra el resultado en el panel derecho.

La siguiente imagen muestra el entorno de arrastrar y soltar para que los widgets elijan y agreguen en la interfaz de usuario de la aplicación. Uno puede cambiar al diseño de diseño haciendo clic en el botón inferior izquierdo, que se muestra a continuación.

Comprender la parte de codificación

Como hemos entendido la parte de diseño de manera similar, otra parte principal es la parte de codificación. En la imagen de abajo puedes ver un archivo llamado MainActivity.kt . Sí, este es el archivo donde escribes la parte del backend. La parte lógica. Por ejemplo, desea sumar dos números. Entonces, después de ingresar dos números en EditText, cuando el usuario haga clic en el Botón, dará como resultado la suma de dos números. Entonces, para calcular la suma, debes escribir la lógica en su parte.

Nota: si selecciona Idioma como Java durante la creación del proyecto, el nombre del archivo será MainActivity.java .

Ejecutar la aplicación de Android

Para ejecutar una aplicación hay dos formas de hacerlo. Uno está usando un emulador, otro está usando un dispositivo físico conectándolo a través de un cable USB. Consulte Cómo instalar un dispositivo virtual de Android (AVD), cómo configurar un dispositivo virtual de Android o consulte ¿Cómo ejecutar la aplicación de Android en un dispositivo real? configurar un dispositivo Android físico real y ejecutar aplicaciones en él. Mire el siguiente video sobre cómo ejecutar su muy famosa » Aplicación de Android Hello World » en su emulador de Android.

¡¡Sí!! Ha creado con éxito su primera aplicación de Android. Ahora construyamos la segunda » Aplicación de Android para sumar dos números «

Implementación paso a paso del Proyecto 1: aplicación de Android para sumar dos números

Paso 1: Del mismo modo, cree un nuevo proyecto, pero esta vez elija Java como lenguaje de programación. Elija el nombre del proyecto usted mismo.

Paso 2: en primer lugar, vaya al archivo XML

Ahora vaya a la sección Código y escriba el código para agregar 3 TextView , 2 EditText y 1 Button y asigne una ID a cada componente. Asigne margin-top, left, right para la ubicación.

Aquí aprenderá otros conceptos importantes en Android, es decir, ¿Qué es RelativeLayout ? ¿Qué es TextView ? ¿Qué es EditText? y ¿Qué es el botón? Puede consultar los siguientes artículos para tener una idea de qué son.

Así que vamos a desarrollar la interfaz de usuario algo así

A continuación se muestra el código para el archivo activity_main.xml . Se agregan comentarios dentro del código para comprender el código con más detalle. Consulte el código en detalle y podrá cambiar el valor y jugar con la interfaz de usuario. 

XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    tools:layout_editor_absoluteY="81dp">
 
    <!-- for message input first number -->
    <TextView
        android:id="@+id/textView_first_no"
        android:layout_width="150dp"
        android:layout_height="25dp"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="50dp"
        android:text="First number"
        android:textSize="20dp" />
 
    <!-- take the input first number -->
    <EditText
        android:id="@+id/editText_first_no"
        android:layout_width="150dp"
        android:layout_height="40dp"
        android:layout_marginLeft="200dp"
        android:layout_marginTop="40dp"
        android:inputType="number" />
 
    <!-- for message input second number -->
    <TextView
        android:id="@+id/textView_second_no"
        android:layout_width="150dp"
        android:layout_height="25dp"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="100dp"
        android:text="Second number"
        android:textSize="20dp" />
 
    <!-- take input for second number -->
    <EditText
        android:id="@+id/editText_second_no"
        android:layout_width="150dp"
        android:layout_height="40dp"
        android:layout_marginLeft="200dp"
        android:layout_marginTop="90dp"
        android:inputType="number"
        tools:ignore="MissingConstraints" />
 
    <!-- button for run add logic and view result -->
    <Button
        android:id="@+id/add_button"
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:layout_marginLeft="110dp"
        android:layout_marginTop="200dp"
        android:text="ADD" />
 
    <!-- Text view for result view-->
    <TextView
        android:id="@+id/textView_answer"
        android:layout_width="100dp"
        android:layout_height="25dp"
        android:layout_marginLeft="130dp"
        android:layout_marginTop="300dp"
        android:text="0"
        android:textSize="20dp"
        android:textStyle="bold" />
 
</RelativeLayout>

Paso 3: trabajar con el archivo MainActivity.java

En este archivo, vamos a escribir la lógica para sumar dos números. Echemos un vistazo al siguiente código. No te preocupes, vamos a explicar cada línea de código en detalle. 

Java

package com.example.addtwonumbers;
 
// Each new activity has its own layout and Java files,
// here we build the logic for adding two number
 
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
 
import androidx.appcompat.app.AppCompatActivity;
 
public class MainActivity extends AppCompatActivity {
 
    // define the global variable
 
    // variable number1, number2
    // for input input number
    // Add_button, result textView
    EditText number1;
    EditText number2;
    Button Add_button;
    TextView result;
   
    int ans = 0;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        // by ID we can use each component which id is assign in xml file
        number1 = (EditText) findViewById(R.id.editText_first_no);
        number2 = (EditText) findViewById(R.id.editText_second_no);
        Add_button = (Button) findViewById(R.id.add_button);
        result = (TextView) findViewById(R.id.textView_answer);
 
        // Add_button add clicklistener
        Add_button.setOnClickListener(new View.OnClickListener() {
 
            public void onClick(View v) {
 
                // num1 or num2 double type
                // get data which is in edittext, convert it to string
                // using parse Double convert it to Double type
                double num1 = Double.parseDouble(number1.getText().toString());
                double num2 = Double.parseDouble(number2.getText().toString());
                // add both number and store it to sum
                double sum = num1 + num2;
                // set it ot result textview
                result.setText(Double.toString(sum));
            }
        });
    }
}

Explicación:

El nombre del paquete de su aplicación de Android. 

package com.example.addtwonumbers;

Lista de bibliotecas utilizadas en su aplicación.

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

Número variable 1, número 2 para el número de entrada (EditText). De manera similar , la variable add_button es para nuestro botón utilizado en el código XML y la variable de resultado es para TextView.

EditText number1;
EditText number2;
Button add_button;
TextView result;

Recuerde que ha asignado una ID para cada componente en el archivo XML. Sí, lo van a usar aquí. Por ID, podemos usar cada componente cuya ID está asignada en el archivo XML como se muestra a continuación.

number1 = (EditText) findViewById(R.id.editText_first_no);
number2 = (EditText) findViewById(R.id.editText_second_no);
add_button = (Button) findViewById(R.id.add_button);
result = (TextView) findViewById(R.id.textView_answer);

Y por último, agregamos un setOnClickListener() a nuestro Botón. Entonces, cuando el usuario hace clic en el botón, esto nos dará la salida. Y dentro de eso, hemos escrito lógica simple para sumar esos números. Y también setText() para nuestro TextView de salida. Tan simple como eso. Eso es todo. 

add_button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                double num1 = Double.parseDouble(number1.getText().toString());
                double num2 = Double.parseDouble(number2.getText().toString());
                double sum = num1 + num2;
                result.setText(Double.toString(sum));
       }
});

Sí, ha desarrollado con éxito una aplicación de Android que toma dos números de los usuarios y los agrega. Ahora ejecute la aplicación como antes y podrá ver el resultado de la siguiente manera. 

Producción:

Para ver el artículo completo, consulte esto: Aplicación de Android para agregar dos números

2da semana

En la primera semana, ha creado una aplicación de Android muy básica que toma solo dos números y los agrega. Y solo hay algunas líneas de código para realizar esta acción. Así que ahora tienes algunas ideas básicas sobre el desarrollo de aplicaciones para Android. Avancemos hacia el próximo proyecto, » Una aplicación de Android de calculadora científica «, que se ve así. 

Tenga en cuenta que vamos a implementar este proyecto utilizando el lenguaje Kotlin . No te preocupes, Kotlin es similar a Java. Permítanme compartir algunos consejos en Android Studio aquí. 

  1. ¿Cómo convertir código Java a código Kotlin en Android Studio?
  2. ¿Cómo convertir código Kotlin a código Java en Android Studio?

¿Qué vamos a aprender construyendo este proyecto?

Implementación paso a paso del Proyecto 2: aplicación de Android Calculadora científica

Paso 1: Crear un nuevo proyecto

Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Kotlin como lenguaje de programación esta vez.

Paso 2: agregar nuevos colores al archivo colors.xml 

Navegue a la aplicación > res > valores > archivo colors.xml como se muestra a continuación.

Y agregue el siguiente código para diferentes colores. 

XML

<?xml version="1.0" encoding="utf-8"?>
<resources>
     
    <color name="purple_200">#0F9D58</color>
    <color name="purple_500">#0F9D58</color>
    <color name="purple_700">#0F9D58</color>
    <color name="teal_200">#FF03DAC5</color>
    <color name="teal_700">#FF018786</color>
    <color name="black">#FF000000</color>
    <color name="white">#FFFFFFFF</color>
     
    <!--three different shades of black color-->
    <color name="blac_shade_1">#292D36</color>
    <color name="black_shade_2">#272B33</color>
    <color name="black_shade_3">#22252D</color>
    <color name="yellow">#ffa500</color>
     
</resources>

Paso 3: trabajar con el archivo activity_main.xml

Vaya a la aplicación > res > diseño > actividad_principal.xml y agregue el siguiente código a ese archivo. Lo que hemos usado en este archivo:

  • Disposición relativa
  • Vista de texto
  • Vista de tarjeta
  • diseño lineal
  • Botón

Ya le hemos proporcionado los enlaces de referencia necesarios para este período. Puede leerlos con atención. A continuación se muestra el código para el archivo activity_main.xml . Puedes jugar con estos valores y ver cómo funciona el código.

XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/black_shade_3"
    tools:context=".MainActivity">
 
    <TextView
        android:id="@+id/idTVSecondary"
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:background="@color/black_shade_3"
        android:gravity="bottom"
        android:maxLines="1"
        android:padding="10dp"
        android:paddingTop="30dp"
        android:text=""
        android:textAlignment="viewEnd"
        android:textColor="@color/white"
        android:textSize="15sp"
        tools:ignore="RtlCompat" />
     
    <TextView
        android:id="@+id/idTVprimary"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:layout_below="@id/idTVSecondary"
        android:background="@color/black_shade_3"
        android:gravity="bottom"
        android:maxLines="1"
        android:padding="10dp"
        android:text=""
        android:textAlignment="viewEnd"
        android:textColor="#fff"
        android:textSize="50sp"
        tools:ignore="RtlCompat" />
 
    <androidx.cardview.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/idTVprimary"
        android:background="@color/blac_shade_1"
        app:cardCornerRadius="4dp"
        app:cardElevation="2dp">
 
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="7"
            android:background="@color/blac_shade_1"
            android:orientation="vertical">
 
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"
                android:weightSum="7">
 
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:orientation="horizontal">
 
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:orientation="horizontal"
                        android:weightSum="4">
 
                        <Button
                            android:id="@+id/bac"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_margin="3dp"
                            android:layout_weight="1"
                            android:backgroundTint="@color/black_shade_2"
                            android:padding="6dp"
                            android:text="AC"
                            android:textColor="@color/yellow"
                            android:textSize="15sp"
                            tools:targetApi="lollipop" />
 
                        <Button
                            android:id="@+id/bc"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_margin="3dp"
                            android:layout_weight="1"
                            android:backgroundTint="@color/black_shade_2"
                            android:padding="6dp"
                            android:text="C"
                            android:textColor="@color/yellow"
                            android:textSize="15sp" />
                         
                        <Button
                            android:id="@+id/bbrac1"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_margin="3dp"
                            android:layout_weight="1"
                            android:backgroundTint="@color/black_shade_2"
                            android:padding="6dp"
                            android:text="("
                            android:textColor="#ffa500"
                            android:textSize="15sp" />
 
                        <Button
                            android:id="@+id/bbrac2"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_margin="3dp"
                            android:layout_weight="1"
                            android:backgroundTint="@color/black_shade_2"
                            android:padding="6dp"
                            android:text=")"
                            android:textColor="#ffa500"
                            android:textSize="15sp" />
 
                    </LinearLayout>
 
                </LinearLayout>
 
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:orientation="horizontal">
 
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:orientation="horizontal"
                        android:weightSum="5">
 
                        <Button
                            android:id="@+id/bsin"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_margin="3dp"
                            android:layout_weight="1"
                            android:backgroundTint="@color/black_shade_2"
                            android:padding="6dp"
                            android:text="sin"
                            android:textAllCaps="false"
                            android:textColor="#ffa500"
                            android:textSize="15sp" />
                         
                        <Button
                            android:id="@+id/bcos"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_margin="3dp"
                            android:layout_weight="1"
                            android:backgroundTint="@color/black_shade_2"
                            android:padding="6dp"
                            android:text="cos"
                            android:textAllCaps="false"
                            android:textColor="#ffa500"
                            android:textSize="15sp" />
                         
                        <Button
                            android:id="@+id/btan"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_margin="3dp"
                            android:layout_weight="1"
                            android:backgroundTint="@color/black_shade_2"
                            android:padding="6dp"
                            android:text="tan"
                            android:textAllCaps="false"
                            android:textColor="#ffa500"
                            android:textSize="15sp" />
                         
                        <Button
                            android:id="@+id/blog"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_margin="3dp"
                            android:layout_weight="1"
                            android:backgroundTint="@color/black_shade_2"
                            android:padding="6dp"
                            android:text="log"
                            android:textAllCaps="false"
                            android:textColor="#ffa500"
                            android:textSize="15sp" />
 
                        <Button
                            android:id="@+id/bln"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_margin="3dp"
                            android:layout_weight="1"
                            android:backgroundTint="@color/black_shade_2"
                            android:padding="6dp"
                            android:text="ln"
                            android:textAllCaps="false"
                            android:textColor="#ffa500"
                            android:textSize="15sp" />
 
 
                    </LinearLayout>
 
                </LinearLayout>
 
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:orientation="horizontal">
 
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:orientation="horizontal"
                        android:weightSum="5">
 
                        <Button
                            android:id="@+id/bfact"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_margin="3dp"
                            android:layout_weight="1"
                            android:backgroundTint="@color/black_shade_2"
                            android:padding="6dp"
                            android:text="x!"
                            android:textAllCaps="false"
                            android:textColor="#ffa500"
                            android:textSize="15sp" />
                         
                        <Button
                            android:id="@+id/bsquare"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_margin="3dp"
                            android:layout_weight="1"
                            android:backgroundTint="@color/black_shade_2"
                            android:padding="6dp"
                            android:text="x²"
                            android:textAllCaps="false"
                            android:textColor="#ffa500"
                            android:textSize="15sp" />
 
                        <Button
                            android:id="@+id/bsqrt"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_margin="3dp"
                            android:layout_weight="1"
                            android:backgroundTint="@color/black_shade_2"
                            android:padding="6dp"
                            android:text="√"
                            android:textColor="#ffa500"
                            android:textSize="15sp" />
                         
                        <Button
                            android:id="@+id/binv"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_margin="3dp"
                            android:layout_weight="1"
                            android:backgroundTint="@color/black_shade_2"
                            android:padding="6dp"
                            android:text="1/x"
                            android:textAllCaps="false"
                            android:textColor="#ffa500"
                            android:textSize="15sp" />
 
                        <Button
                            android:id="@+id/bdiv"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_margin="3dp"
                            android:layout_weight="1"
                            android:backgroundTint="@color/black_shade_2"
                            android:padding="6dp"
                            android:text="÷"
                            android:textColor="#ffa500"
                            android:textSize="15sp" />
                         
                    </LinearLayout>
 
                </LinearLayout>
 
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:orientation="horizontal">
 
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:orientation="horizontal"
                        android:weightSum="4">
 
                        <Button
                            android:id="@+id/b7"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_margin="3dp"
                            android:layout_weight="1"
                            android:backgroundTint="@color/black_shade_2"
                            android:padding="6dp"
                            android:text="7"
                            android:textColor="#fff"
                            android:textSize="15sp" />
                         
                        <Button
                            android:id="@+id/b8"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_margin="3dp"
                            android:layout_weight="1"
                            android:backgroundTint="@color/black_shade_2"
                            android:padding="6dp"
                            android:text="8"
                            android:textColor="#fff"
                            android:textSize="15sp" />
                         
                        <Button
                            android:id="@+id/b9"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_margin="3dp"
                            android:layout_weight="1"
                            android:backgroundTint="@color/black_shade_2"
                            android:padding="6dp"
                            android:text="9"
                            android:textColor="#fff"
                            android:textSize="15sp" />
                         
                        <Button
                            android:id="@+id/bmul"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_margin="3dp"
                            android:layout_weight="1"
                            android:backgroundTint="@color/black_shade_2"
                            android:padding="6dp"
                            android:text="×"
                            android:textColor="#ffa500"
                            android:textSize="15sp" />
                         
                    </LinearLayout>
 
                </LinearLayout>
 
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:orientation="horizontal">
 
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:orientation="horizontal"
                        android:weightSum="4">
 
                        <Button
                            android:id="@+id/b4"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_margin="3dp"
                            android:layout_weight="1"
                            android:backgroundTint="@color/black_shade_2"
                            android:padding="6dp"
                            android:text="4"
                            android:textColor="#fff"
                            android:textSize="15sp" />
                         
                        <Button
                            android:id="@+id/b5"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_margin="3dp"
                            android:layout_weight="1"
                            android:backgroundTint="@color/black_shade_2"
                            android:padding="6dp"
                            android:text="5"
                            android:textColor="#fff"
                            android:textSize="15sp" />
                         
                        <Button
                            android:id="@+id/b6"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_margin="3dp"
                            android:layout_weight="1"
                            android:backgroundTint="@color/black_shade_2"
                            android:padding="6dp"
                            android:text="6"
                            android:textColor="#fff"
                            android:textSize="15sp" />
 
                        <Button
                            android:id="@+id/bminus"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_margin="3dp"
                            android:layout_weight="1"
                            android:backgroundTint="@color/black_shade_2"
                            android:padding="6dp"
                            android:text="-"
                            android:textColor="#ffa500"
                            android:textSize="15sp" />
                         
                    </LinearLayout>
 
                </LinearLayout>
 
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:orientation="horizontal">
 
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:orientation="horizontal"
                        android:weightSum="4">
 
                        <Button
                            android:id="@+id/b1"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_margin="3dp"
                            android:layout_weight="1"
                            android:backgroundTint="@color/black_shade_2"
                            android:padding="6dp"
                            android:text="1"
                            android:textColor="#fff"
                            android:textSize="15sp" />
 
                        <Button
                            android:id="@+id/b2"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_margin="3dp"
                            android:layout_weight="1"
                            android:backgroundTint="@color/black_shade_2"
                            android:padding="6dp"
                            android:text="2"
                            android:textColor="#fff"
                            android:textSize="15sp" />
 
                        <Button
                            android:id="@+id/b3"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_margin="3dp"
                            android:layout_weight="1"
                            android:backgroundTint="@color/black_shade_2"
                            android:padding="6dp"
                            android:text="3"
                            android:textColor="#fff"
                            android:textSize="15sp" />
 
                        <Button
                            android:id="@+id/bplus"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_margin="3dp"
                            android:layout_weight="1"
                            android:backgroundTint="@color/black_shade_2"
                            android:padding="6dp"
                            android:text="+"
                            android:textColor="#ffa500"
                            android:textSize="15sp" />
 
                    </LinearLayout>
 
                </LinearLayout>
 
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:orientation="horizontal">
 
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:orientation="horizontal"
                        android:weightSum="4">
 
                        <Button
                            android:id="@+id/bpi"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_margin="3dp"
                            android:layout_weight="1"
                            android:backgroundTint="@color/black_shade_2"
                            android:padding="6dp"
                            android:text="π"
                            android:textColor="#fff"
                            android:textSize="15sp" />
 
                        <Button
                            android:id="@+id/b0"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_margin="3dp"
                            android:layout_weight="1"
                            android:backgroundTint="@color/black_shade_2"
                            android:padding="6dp"
                            android:text="0"
                            android:textColor="#fff"
                            android:textSize="15sp" />
 
                        <Button
                            android:id="@+id/bdot"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_margin="3dp"
                            android:layout_weight="1"
                            android:backgroundTint="@color/black_shade_2"
                            android:padding="6dp"
                            android:text="."
                            android:textColor="#fff"
                            android:textSize="15sp" />
                         
                        <Button
                            android:id="@+id/bequal"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_margin="3dp"
                            android:layout_weight="1"
                            android:backgroundTint="@color/black_shade_2"
                            android:padding="6dp"
                            android:text="="
                            android:textColor="#ffa500"
                            android:textSize="15sp" />
 
                    </LinearLayout>
 
                </LinearLayout>
 
            </LinearLayout>
 
        </LinearLayout>
 
    </androidx.cardview.widget.CardView>
 
</RelativeLayout>

Paso 4: trabajar con el archivo MainActivity.kt

Entonces, como hemos discutido anteriormente, la parte del backend está escrita en este archivo. La parte backend significa la parte lógica simple. Y para este proyecto, vamos a escribir el código en el lenguaje Kotlin

4.1: Creando variables para nuestro TextView y Button

lateinit var tvsec: TextView
lateinit var tvMain: TextView
lateinit var bac: Button
lateinit var bc: Button
lateinit var bbrac1: Button
lateinit var bbrac2: Button
--------------------------
--------------------------
--------------------------
// similarly create variable for all the TextView 
// and Button you have declared in the XML file

4.2: Inicializar todas las variables

tvsec = findViewById(R.id.idTVSecondary)
tvMain = findViewById(R.id.idTVprimary)
bac = findViewById(R.id.bac)
bc = findViewById(R.id.bc)
--------------------------
--------------------------
--------------------------
// similarly initialize all the variables

4.3: Agregar onClickListener() a todos los botones

b1.setOnClickListener {
  // on below line we are appending 
  // the expression to our text view.
  tvMain.text = (tvMain.text.toString() + "1")
}
b2.setOnClickListener {
  // on below line we are appending 
  // the expression to our text view.
  tvMain.text = (tvMain.text.toString() + "2")
--------------------------
--------------------------
// similarly Add onClickListener() to all the Buttons

Por último, escriba la lógica de hoyuelos para todos los cálculos (suma, multiplicación, división, etc.). Vamos a escribir el código para el factorial de un número. Así que escribe el código de la siguiente manera:

fun factorial(n: Int): Int {
        // this method is use to find factorial
        return if (n == 1 || n == 0) 1 else n * factorial(n - 1)
    }

A continuación se muestra el código completo del archivo MainActivity.java . Se agregan comentarios dentro del código para comprender el código con más detalle.

Kotlin

import android.os.Bundle
import android.widget.Button
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
 
class MainActivity : AppCompatActivity() {
 
    // creating variables for our text view and button
    lateinit var tvsec: TextView
    lateinit var tvMain: TextView
    lateinit var bac: Button
    lateinit var bc: Button
    lateinit var bbrac1: Button
    lateinit var bbrac2: Button
    lateinit var bsin: Button
    lateinit var bcos: Button
    lateinit var btan: Button
    lateinit var blog: Button
    lateinit var bln: Button
    lateinit var bfact: Button
    lateinit var bsquare: Button
    lateinit var bsqrt: Button
    lateinit var binv: Button
    lateinit var b0: Button
    lateinit var b9: Button
    lateinit var b8: Button
    lateinit var b7: Button
    lateinit var b6: Button
    lateinit var b5: Button
    lateinit var b4: Button
    lateinit var b3: Button
    lateinit var b2: Button
    lateinit var b1: Button
    lateinit var bpi: Button
    lateinit var bmul: Button
    lateinit var bminus: Button
    lateinit var bplus: Button
    lateinit var bequal: Button
    lateinit var bdot: Button
    lateinit var bdiv: Button
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
         
        // initializing all our variables.
        tvsec = findViewById(R.id.idTVSecondary)
        tvMain = findViewById(R.id.idTVprimary)
        bac = findViewById(R.id.bac)
        bc = findViewById(R.id.bc)
        bbrac1 = findViewById(R.id.bbrac1)
        bbrac2 = findViewById(R.id.bbrac2)
        bsin = findViewById(R.id.bsin)
        bcos = findViewById(R.id.bcos)
        btan = findViewById(R.id.btan)
        blog = findViewById(R.id.blog)
        bln = findViewById(R.id.bln)
        bfact = findViewById(R.id.bfact)
        bsquare = findViewById(R.id.bsquare)
        bsqrt = findViewById(R.id.bsqrt)
        binv = findViewById(R.id.binv)
        b0 = findViewById(R.id.b0)
        b9 = findViewById(R.id.b9)
        b8 = findViewById(R.id.b8)
        b7 = findViewById(R.id.b7)
        b6 = findViewById(R.id.b6)
        b5 = findViewById(R.id.b5)
        b4 = findViewById(R.id.b4)
        b3 = findViewById(R.id.b3)
        b2 = findViewById(R.id.b2)
        b1 = findViewById(R.id.b1)
        bpi = findViewById(R.id.bpi)
        bmul = findViewById(R.id.bmul)
        bminus = findViewById(R.id.bminus)
        bplus = findViewById(R.id.bplus)
        bequal = findViewById(R.id.bequal)
        bdot = findViewById(R.id.bdot)
        bdiv = findViewById(R.id.bdiv)
 
        // adding on click listener to our all buttons.
        b1.setOnClickListener {
            // on below line we are appending
            // the expression to our text view.
            tvMain.text = (tvMain.text.toString() + "1")
        }
        b2.setOnClickListener {
            // on below line we are appending
            // the expression to our text view.
            tvMain.text = (tvMain.text.toString() + "2")
        }
        b3.setOnClickListener {
            // on below line we are appending
            // the expression to our text view.
            tvMain.text = (tvMain.text.toString() + "3")
        }
        b4.setOnClickListener {
            tvMain.text = (tvMain.text.toString() + "4")
        }
        b5.setOnClickListener {
            tvMain.text = (tvMain.text.toString() + "5")
        }
        b6.setOnClickListener {
            tvMain.text = (tvMain.text.toString() + "6")
        }
        b7.setOnClickListener {
            tvMain.text = (tvMain.text.toString() + "7")
        }
        b8.setOnClickListener {
            tvMain.text = (tvMain.text.toString() + "8")
        }
        b9.setOnClickListener {
            tvMain.text = (tvMain.text.toString() + "9")
        }
        b0.setOnClickListener {
            tvMain.text = (tvMain.text.toString() + "0")
        }
        bdot.setOnClickListener {
            tvMain.text = (tvMain.text.toString() + ".")
        }
        bplus.setOnClickListener {
            tvMain.text = (tvMain.text.toString() + "+")
        }
        bdiv.setOnClickListener {
            tvMain.text = (tvMain.text.toString() + "/")
        }
        bbrac1.setOnClickListener {
            tvMain.text = (tvMain.text.toString() + "(")
        }
        bbrac2.setOnClickListener {
            tvMain.text = (tvMain.text.toString() + ")")
        }
        bpi.setOnClickListener {
            // on clicking on pi button we are adding
            // pi value as 3.142 to our current value.
            tvMain.text = (tvMain.text.toString() + "3.142")
            tvsec.text = (bpi.text.toString())
        }
        bsin.setOnClickListener {
            tvMain.text = (tvMain.text.toString() + "sin")
        }
        bcos.setOnClickListener {
            tvMain.text = (tvMain.text.toString() + "cos")
        }
        btan.setOnClickListener {
            tvMain.text = (tvMain.text.toString() + "tan")
        }
        binv.setOnClickListener {
            tvMain.text = (tvMain.text.toString() + "^" + "(-1)")
        }
        bln.setOnClickListener {
            tvMain.text = (tvMain.text.toString() + "ln")
        }
        blog.setOnClickListener {
            tvMain.text = (tvMain.text.toString() + "log")
        }
 
        bminus.setOnClickListener {
            // on clicking on minus we are checking if
            // the user has already a minus operation on screen.
            // if minus operation is already present
            // then we will not do anything.
            val str: String = tvMain.text.toString()
            if (!str.get(index = str.length - 1).equals("-")) {
                tvMain.text = (tvMain.text.toString() + "-")
            }
        }
        bmul.setOnClickListener {
            // if mul sign is not present in our
            // text view then only we are adding
            // the multiplication operator to it.
            val str: String = tvMain.text.toString()
            if (!str.get(index = str.length - 1).equals("*")) {
                tvMain.text = (tvMain.text.toString() + "*")
            }
        }
        bsqrt.setOnClickListener {
            if (tvMain.text.toString().isEmpty()) {
                // if the entered number is empty we are displaying an error message.
                Toast.makeText(this, "Please enter a valid number..", Toast.LENGTH_SHORT).show()
            } else {
                val str: String = tvMain.text.toString()
                // on below line we are calculation
                // square root of the given number.
                val r = Math.sqrt(str.toDouble())
                // on below line we are converting our double
                // to string and then setting it to text view.
                val result = r.toString()
                tvMain.setText(result)
            }
        }
        bequal.setOnClickListener {
            val str: String = tvMain.text.toString()
            // on below line we are calling an evaluate
            // method to calculate the value of expressions.
            val result: Double = evaluate(str)
            // on below line we are getting result
            // and setting it to text view.
            val r = result.toString()
            tvMain.setText(r)
            tvsec.text = str
        }
        bac.setOnClickListener {
            // on clicking on ac button we are clearing
            // our primary and secondary text view.
            tvMain.setText("")
            tvsec.setText("")
        }
        bc.setOnClickListener {
            // on clicking on c button we are clearing
            // the last character by checking the length.
            var str: String = tvMain.text.toString()
            if (!str.equals("")) {
                str = str.substring(0, str.length - 1)
                tvMain.text = str
            }
        }
        bsquare.setOnClickListener {
            if (tvMain.text.toString().isEmpty()) {
                // if the entered number is empty we are displaying an error message.
                Toast.makeText(this, "Please enter a valid number..", Toast.LENGTH_SHORT).show()
            } else {
                // on below line we are getting the expression and then calculating the square of the number
                val d: Double = tvMain.getText().toString().toDouble()
                // on below line we are calculating the square.
                val square = d * d
                // after calculating the square we
                // are setting it to text view.
                tvMain.setText(square.toString())
                // on below line we are setting
                // the d to secondary text view.
                tvsec.text = "$d²"
            }
        }
        bfact.setOnClickListener {
            if (tvMain.text.toString().isEmpty()) {
                // if the entered number is empty we are displaying an error message.
                Toast.makeText(this, "Please enter a valid number..", Toast.LENGTH_SHORT).show()
            } else {
                // on below line we are getting int value
                // and calculating the factorial value of the entered number.
                val value: Int = tvMain.text.toString().toInt()
                val fact: Int = factorial(value)
                tvMain.setText(fact.toString())
                tvsec.text = "$value`!"
            }
 
        }
         
    }
 
    fun factorial(n: Int): Int {
        // this method is use to find factorial
        return if (n == 1 || n == 0) 1 else n * factorial(n - 1)
    }
 
    fun evaluate(str: String): Double {
        return object : Any() {
            // on below line we are creating variable
            // for tracking the position and char pos.
            var pos = -1
            var ch = 0
 
            // below method is for moving to next character.
            fun nextChar() {
                // on below line we are incrementing our position
                // and moving it to next position.
                ch = if (++pos < str.length) str[pos].toInt() else -1
            }
 
            // this method is use to check the extra space
            // present int the expression and removing it.
            fun eat(charToEat: Int): Boolean {
                while (ch == ' '.toInt()) nextChar()
                // on below line we are checking the char pos
                // if both is equal then we are returning it to true.
                if (ch == charToEat) {
                    nextChar()
                    return true
                }
                return false
            }
 
            // below method is to parse our
            // expression and to get the ans
            // in this we are calling a parse
            // expression method to calculate the value.
            fun parse(): Double {
                nextChar()
                val x = parseExpression()
                if (pos < str.length) throw RuntimeException("Unexpected: " + ch.toChar())
                return x
            }
 
            // in this method we will only perform addition and
            // subtraction operation on the expression.
            fun parseExpression(): Double {
                var x = parseTerm()
                while (true) {
                    if (eat('+'.toInt())) x += parseTerm() // addition
                    else if (eat('-'.toInt())) x -= parseTerm() // subtraction
                    else return x
                }
            }
 
            // in below method we will perform
            // only multiplication and division operation.
            fun parseTerm(): Double {
                var x = parseFactor()
                while (true) {
                    if (eat('*'.toInt())) x *= parseFactor() // multiplication
                    else if (eat('/'.toInt())) x /= parseFactor() // division
                    else return x
                }
            }
 
            // below method is use to parse the factor
            fun parseFactor(): Double {
                //on below line we are checking for addition
                // and subtraction and performing unary operations.
                if (eat('+'.toInt())) return parseFactor() // unary plus
                if (eat('-'.toInt())) return -parseFactor() // unary minus
                // creating a double variable for ans.
                var x: Double
                // on below line we are creating
                // a variable for position.
                val startPos = pos
                // on below line we are checking
                // for opening and closing parenthesis.
                if (eat('('.toInt())) { // parentheses
                    x = parseExpression()
                    eat(')'.toInt())
                } else if (ch >= '0'.toInt() && ch <= '9'.toInt() || ch == '.'.toInt()) {
                    // numbers
                    while (ch >= '0'.toInt() && ch <= '9'.toInt() || ch == '.'.toInt()) nextChar()
                    // on below line we are getting sub string from our string using start and pos.
                    x = str.substring(startPos, pos).toDouble()
                } else if (ch >= 'a'.toInt() && ch <= 'z'.toInt()) {
                    // on below function we are checking for the operator in our expression.
                    while (ch >= 'a'.toInt() && ch <= 'z'.toInt()) nextChar()
                    val func = str.substring(startPos, pos)
                    // calling a method to parse our factor.
                    x = parseFactor()
                    // on below line we are checking for square root.
                    x =
                        if (func == "sqrt") Math.sqrt(x)
                        // on below line we are checking for sin function
                        // and calculating sin function using Math class.
                        else if (func == "sin") Math.sin(
                            Math.toRadians(x)
                            // on below line we are calculating the cos value
                        ) else if (func == "cos") Math.cos(
                            Math.toRadians(x)
                            // on below line we are calculating
                            // the tan value of our expression.
                        ) else if (func == "tan")
                            Math.tan(Math.toRadians(x))
                        // on below line we are calculating
                        // log value of the expression.
                        else if (func == "log")
                            Math.log10(x)
                        // on below line we are calculating
                        // ln value of expression.
                        else if (func == "ln") Math.log(x)
                        // f we get any error then
                        // we simply return the exception.
                        else throw RuntimeException(
                            "Unknown function: $func"
                        )
                } else {
                    // if the condition not satisfy then we are returning the exception
                    throw RuntimeException("Unexpected: " + ch.toChar())
                }
                // on below line we are calculating the power of the expression.
                if (eat('^'.toInt())) x = Math.pow(x, parseFactor()) // exponentiation
                return x
            }
            // at last calling a parse for our expression.
        }.parse()
    }
}

Producción:

Para ver el artículo completo, consulte esto : ¿Cómo hacer una aplicación de Android de calculadora científica usando Android Studio?

También puede consultar el siguiente video:

3ra semana

En la tercera semana de desarrollo de aplicaciones Android, aprenderemos los siguientes conceptos muy importantes

  1. ¿Qué es la API REST?
  2. Biblioteca Volley en Android
  3. ¿Qué es un archivo JSON?
  4. JSON Parsing en Android usando Volley Library

1. ¿Qué es la API REST?

RE Presentational State T ransfer (REST) ​​es un estilo arquitectónico que define un conjunto de restricciones que se utilizarán para crear servicios web. REST API es una forma de acceder a los servicios web de manera simple y flexible sin tener ningún procesamiento. 

Para leer más, consulte este artículo: Introducción a la API REST

2. Biblioteca Volley en Android

Volley es una biblioteca HTTP que hace que la creación de redes sea muy fácil y rápida para las aplicaciones de Android. Fue desarrollado por Google y presentado durante Google I/O 2013. Fue desarrollado debido a la ausencia en el SDK de Android de una clase de red capaz de funcionar sin interferir con la experiencia del usuario. Aunque Volley es parte del Proyecto de código abierto de Android (AOSP), Google anunció en enero de 2017 que Volley se trasladará a una biblioteca independiente. Administra el procesamiento y el almacenamiento en caché de las requests de red y ahorra a los desarrolladores un tiempo valioso al escribir el mismo código de llamada/caché de red una y otra vez.

Para leer más, consulte este artículo: Volley Library en Android

3. ¿Qué es un archivo JSON?

JSON significa Notación de objetos de JavaScript . Es un formato de intercambio de datos basado en texto para mantener la estructura de los datos. JSON es el reemplazo del formato de intercambio de datos XML en JSON. Es fácil estructurar los datos en comparación con XML. Admite estructuras de datos como arrays y objetos y los documentos JSON que se ejecutan rápidamente en el servidor. También es un formato independiente del idioma que se deriva de JavaScript. El tipo de medio oficial para JSON es application/json y para guardar esos archivos tiene la extensión .json.

Para leer más, consulte este artículo: ¿Qué es un archivo JSON?

4. Análisis JSON en Android usando Volley Library

Consulte este artículo para una implementación adecuada : JSON Parsing en Android usando Volley Library

Entonces, después de aprender estos conceptos importantes, desarrollaremos un proyecto intermedio esta semana y el nombre del proyecto es » Construir la aplicación de Android COVID-19 Tracker «. 

Proyecto 3: Cómo construir una aplicación Android de seguimiento de COVID-19

Para construir este proyecto completo, consulte este artículo: Cómo construir una aplicación de Android de seguimiento COVID-19 . En este artículo, se explica en detalle el proceso completo paso a paso, también adjuntamos un video para comprender más profundamente el proyecto. 

4ta Semana

Cuando los desarrolladores trabajan en una aplicación móvil real cuya naturaleza es dinámica y ampliará sus funciones según las necesidades del usuario, entonces no es posible escribir la lógica central en actividades o fragmentos. Para estructurar el código del proyecto y darle un diseño modular (partes de código separadas), se aplican patrones de arquitectura para separar las preocupaciones. Las arquitecturas de Android más populares utilizadas por los desarrolladores son las siguientes:

  1. MVC (Modelo — Vista — Controlador)
  2. MVP (Modelo — Vista — Presentador)
  3. MVVM (Modelo — Vista — ViewModel)

Entonces, en la cuarta semana, aprenderán otro concepto muy importante, es decir, los patrones de arquitectura de Android. Lea los siguientes artículos e intente explorar tanto como usted porque estos conceptos son muy útiles para convertirse en un desarrollador de Android exitoso. 

Entonces, usando estos conceptos, esta semana vamos a desarrollar otra aplicación «Crear una aplicación de notas simple usando el patrón de arquitectura de Android». 

Proyecto 4: Cree una aplicación de Android de notas simples usando MVVM y la base de datos de habitaciones en Kotlin

Para compilar este proyecto completo, consulte este artículo: Cómo compilar una aplicación para Android de notas simples con MVVM y Room Database . En este artículo, se explica en detalle el proceso completo paso a paso, también adjuntamos un video para comprender más profundamente el proyecto. 

5ta Semana

base de fuego! Creo que has oído esta palabra. Firebase es un producto de Google que ayuda a los desarrolladores a crear, administrar y hacer crecer sus aplicaciones fácilmente. Ayuda a los desarrolladores a crear sus aplicaciones de forma más rápida y segura. No se requiere programación en el lado de firebase, lo que facilita el uso de sus funciones de manera más eficiente. Proporciona servicios para android, ios, web y unity. Proporciona almacenamiento en la nube. Utiliza NoSQL para la base de datos para el almacenamiento de datos. Para leer más, consulte este artículo: Introducción a Firebase 

Proyecto 5: Autenticación de usuarios y operación CRUD con Firebase Realtime Database en Android

Entonces, en la quinta semana de Desarrollo de aplicaciones de Android, exploraremos la base de datos de Firebase y cómo realizar la autenticación básica y la operación CRUD (Crear, Leer, Actualizar, Eliminar) con Firebase. Para compilar este proyecto completo, consulte este artículo: Autenticación de usuarios y operación CRUD con Firebase Realtime Database en Android . En este artículo, se explica en detalle el proceso completo paso a paso, también adjuntamos un video para comprender más profundamente el proyecto. 

También puede consultar esta sección para obtener más información sobre Firebase + Android .

6ta semana

En la última semana de desarrollo de aplicaciones de Android, vamos a desarrollar una aplicación de Android avanzada utilizando varios conceptos avanzados. Vamos a construir una aplicación de Android Grocery cuyo resultado es como el siguiente.

Proyecto 6: Cómo crear una aplicación de Android para supermercados usando MVVM y la base de datos de habitaciones

Entonces, en este proyecto, vamos a crear una aplicación de comestibles en Android usando Android Studio. Muchas veces nos olvidamos de comprar cosas que queremos comprar, después de todo, no podemos recordar todos los artículos, por lo que con la ayuda de esta aplicación, puede anotar los artículos de abarrotes que va a comprar, haciendo esto no puedes olvidar ningún artículo que quieras comprar. A continuación se muestra una imagen de muestra para tener una idea de lo que vamos a hacer en este artículo. Tenga en cuenta que vamos a implementar este proyecto utilizando el lenguaje Kotlin . En este proyecto, usamos MVVM (Model View ViewModel) para patrones arquitectónicos, Room para base de datos, Coroutines y RecyclerView para mostrar la lista de elementos. 

Para compilar este proyecto completo, consulte este artículo: Cómo compilar una aplicación de supermercado para Android usando MVVM y la base de datos de habitaciones . En este artículo, se explica en detalle el proceso completo paso a paso, también adjuntamos un video para comprender más profundamente el proyecto. 

Debe consultar el siguiente tutorial en Android

Publicación traducida automáticamente

Artículo escrito por AmiyaRanjanRout y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *