Android ProgressBar es un control de interfaz de usuario que indica el progreso de una operación. Por ejemplo, descargando un archivo, subiendo un archivo a internet podemos ver la barra de progreso para estimar el tiempo restante en funcionamiento. Hay dos modos de ProgressBar:
- Barra de progreso determinada
- Barra de progreso indeterminada
Barra de progreso determinada
En común, usamos el modo Determinar progreso en ProgressBar porque muestra la cantidad de progreso que ha ocurrido como el porcentaje (%) del archivo descargado, cuántos datos se cargaron o descargaron en Internet, etc. Si tenemos que usar determinado, establecemos el estilo de la barra de progreso de la siguiente manera:
XML
<ProgressBar android:id="@+id/pBar" style="?android:attr/progressBarStyleHorizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" />
Barra de progreso indeterminada
Aquí, no tenemos la idea de que el progreso del trabajo significa cuánto se ha completado o cuánto tiempo llevará completarlo.
Podemos usar la barra de progreso indeterminada como se muestra a continuación al establecer el atributo indeterminado como verdadero.
XML
<ProgressBar android:id="@+id/pBar" style="?android:attr/progressBarStyleHorizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:indeterminate="true"/>
Diferentes atributos de los widgets ProgressBar
Atributos XML |
Descripción |
---|---|
Android: identificación | Se utiliza para identificar de forma única el control. |
Android: min | Se utiliza para establecer el valor mínimo |
android: máximo | Se utiliza para establecer el valor máximo |
Android: progreso | Se utiliza para establecer el valor entero de progreso predeterminado entre 0 y máx. |
Android: altura mínima | Se utiliza para establecer la altura de la barra de progreso. |
android: ancho mínimo | Se utiliza para establecer el ancho de la barra de progreso. |
android:fondo | Se utiliza para establecer el color de fondo de la barra de progreso |
Android: indeterminado | Se utiliza para habilitar el modo de progreso indeterminado. |
Android: relleno | Se utiliza para configurar el relleno para la izquierda, la derecha, la parte superior o la parte inferior de la barra de progreso. |
Agregue el widget ProgressBar en el archivo activity_main.xml
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" tools:context=".MainActivity"> <!-- adding progress bar --> <ProgressBar android:id="@+id/progress_Bar" style="?android:attr/progressBarStyle" android:layout_width="200dp" android:layout_height="wrap_content" android:layout_marginLeft="70dp" android:layout_marginTop="150dp" android:indeterminate = "true" android:max="100" android:minWidth="200dp" android:minHeight="50dp" android:visibility="invisible" android:layout_centerInParent="true" android:progress="0" android:layout_marginStart="70dp" /> <!-- adding textview which will show the progress --> <TextView android:id="@+id/text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/progress_Bar" android:layout_centerHorizontal="true" /> <!-- adding button to start the progress --> <Button android:id="@+id/show_button" android:layout_width="191dp" android:layout_height="wrap_content" android:layout_below="@+id/text_view" android:layout_marginLeft="70dp" android:layout_marginTop="20dp" android:text="Progress Bar" android:layout_centerHorizontal="true" android:layout_marginStart="70dp" /> </RelativeLayout>
Acceda al widget ProgressBar en el archivo MainActivity.kt
Kotlin
import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.Button import android.widget.ProgressBar import android.widget.TextView import android.os.Handler class MainActivity : AppCompatActivity() { private var progressBar: ProgressBar? = null private var i = 0 private var txtView: TextView? = null private val handler = Handler() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // finding progressbar by its id progressBar = findViewById<ProgressBar>(R.id.progress_Bar) as ProgressBar // finding textview by its id txtView = findViewById<TextView>(R.id.text_view) // finding button by its id val btn = findViewById<Button>(R.id.show_button) // handling click on button btn.setOnClickListener { // Before clicking the button the progress bar will invisible // so we have to change the visibility of the progress bar to visible // setting the progressbar visibility to visible progressBar.visibility = View.VISIBLE i = progressBar.progress Thread(Runnable { // this loop will run until the value of i becomes 99 while (i < 100) { i += 1 // Update the progress bar and display the current value handler.post(Runnable { progressBar.progress = i // setting current progress to the textview txtView!!.text = i.toString() + "/" + progressBar.max }) try { Thread.sleep(100) } catch (e: InterruptedException) { e.printStackTrace() } } // setting the visibility of the progressbar to invisible // or you can use View.GONE instead of invisible // View.GONE will remove the progressbar progressBar.visibility = View.INVISIBLE }).start() } } }
Archivo AndroidManifest.xml
XML
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.geeksforgeeks.myfirstkotlinapp"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Producción:
Publicación traducida automáticamente
Artículo escrito por bibeksah36 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA