¿Cómo crear botones dentro de un widget en Android?

requisitos previos

Un widget es una versión mini de una aplicación, que proporciona una base para que el usuario navegue por ella o use sus funciones desde la pantalla de inicio o la pantalla de bloqueo. Los widgets contienen elementos de acuerdo con las funciones que proporciona. Los widgets, como se denominó anteriormente una versión mini de la aplicación, son capaces de mostrar elementos similares a los de una aplicación. A través de este artículo, demostraremos la implementación de los botones y, en consecuencia, cómo se pueden usar para ciertas funcionalidades. Aquí hay una vista previa de la misma:

Widget with two buttons, Activity1 and Activity2

Pasos para crear botones dentro de un widget

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.

Paso 2: agregue el widget de la aplicación al proyecto

  • Haga clic derecho en la aplicación , mueva el cursor a nuevo , busque la opción » Widget » al final, selecciónela.

widget screenshot

  • Especifique las propiedades requeridas para el widget, como min.width y height , archivo de configuración e idioma preferido, etc., y continúe. Los archivos se generan automáticamente.

widget screenshot

Paso 3: ¿Qué programar? ¿Dónde programar?

  1. En nuestra aplicación, dado que deseamos mostrar dos botones llamados » Actividad1 » y » Actividad2 «, debemos declararlos dentro del archivo new_app_widget.xml que se encuentra dentro de los Diseños en la carpeta Recursos.
  2. Toda la programación (back-end) se realiza en el recién creado NewAppWidget.kt, Kotlin Class File en la carpeta de origen principal. Aquí, construimos los Botones . Dado que estos botones redirigirán a los usuarios a diferentes actividades, necesitamos crear dos actividades vacías, las llamamos » Actividad1 » y » Actividad2 » respectivamente.
  3. Estas actividades sirven como intentos pendientes, ya que se inicializan solo cuando el usuario hace clic en uno de los botones.
  4. Se realizan cambios en los archivos front-end de la Actividad 1 y la Actividad 2 para representar sus nombres.
  5. Simplemente consulte los códigos a continuación y los comentarios correspondientes que se dan a continuación.
  • Archivos new_app_widget.xml y NewAppWidget.kt

XML

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#0F9D58"
    android:padding="@dimen/widget_margin">
  
    <!-- Button 1 -->
    <Button
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Activity1"
        android:layout_centerInParent="true"
        />
    
    <!-- Button 2 -->
    <Button
        android:id="@+id/btn2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Activity2"
        android:layout_centerHorizontal="true"
        android:layout_below="@id/btn1"
        />
  
</RelativeLayout>

Kotlin

package org.geeksforgeeks.widget_buttons
  
import android.app.PendingIntent
import android.appwidget.AppWidgetManager
import android.appwidget.AppWidgetProvider
import android.content.Context
import android.content.Intent
import android.widget.RemoteViews
  
  
// Implementation of App Widget functionality
class NewAppWidget : AppWidgetProvider() {
    override fun onUpdate(
        context: Context,
        appWidgetManager: AppWidgetManager,
        appWidgetIds: IntArray
    ) {
        // There may be multiple widgets active, so update all of them
        for (appWidgetId in appWidgetIds) {
            updateAppWidget(context, appWidgetManager, appWidgetId)
        }
    }
  
    // Enter relevant functionality for when
      // the first widget is created
    override fun onEnabled(context: Context) {
         
    }
  
    // Enter relevant functionality for when
      // the last widget is disabled
    override fun onDisabled(context: Context) {
         
    }
  
}
  
internal fun updateAppWidget(
    context: Context,
    appWidgetManager: AppWidgetManager,
    appWidgetId: Int
) 
  
/////////////////////////////Start Coding Here///////////////////////////////////////
{
  
    // Create a pending Intent for Activity 1
    val i1 : PendingIntent = Intent(context,Activity1::class.java).let { intent ->
        PendingIntent.getActivity(context, 0, intent, 0)  }
  
    // Create a pending Intent for Activity 2
    val i2 : PendingIntent = Intent(context,Activity2::class.java).let { intent ->
        PendingIntent.getActivity(context, 0, intent, 0)  }
  
    // Construct the RemoteViews object
    val views = RemoteViews(context.packageName, R.layout.new_app_widget)
        // Button 1 onClick Function
        .apply{setOnClickPendingIntent(R.id.btn1,i1)} 
        // Button 2 onClick Function
        .apply { setOnClickPendingIntent(R.id.btn2,i2) } 
  
    // Instruct the widget manager to update the widget
    appWidgetManager.updateAppWidget(appWidgetId, views)
}
/////////////////////////////Code Ends Here///////////////////////////////////////
  • Archivos activity_1.xml, Activity1.kt, activity_2.xml, Activity2.kt

En ambos, los archivos XML agregan solo un TextView , y en los archivos Kotlin, no agregamos nada. Los usuarios pueden escribir su propio código según sus requisitos dentro de esos archivos.

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=".Activity1">
  
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Activity 1"
        android:layout_centerInParent="true"
        />
  
</RelativeLayout>

Kotlin

package org.geeksforgeeks.widget_buttons
  
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
  
class Activity1 : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_1)
    }
}

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=".Activity2">
  
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Activity 2"
        android:layout_centerInParent="true"
        />
  
</RelativeLayout>

Kotlin

package org.geeksforgeeks.widget_buttons
  
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
  
class Activity2 : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_2)
    }
}
  • Archivos activity_main.xml, MainActivity.kt

No hay nada que hacer dentro de los archivos activity_main.xml, MainActivity.kt. Los usuarios pueden escribir su propio código según sus requisitos dentro de esos archivos.

XML

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
    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">
  
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
  
</androidx.constraintlayout.widget.ConstraintLayout>

Kotlin

package org.geeksforgeeks.widget_buttons
  
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
  
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}

Salida: ejecutar en el emulador

Publicación traducida automáticamente

Artículo escrito por aashaypawar 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 *