📜  如何在Android的小部件内创建按钮?

📅  最后修改于: 2021-05-10 16:19:04             🧑  作者: Mango

先决条件

  • 如何创建Android应用程序的基本小部件?
  • 如何创建Android应用程序的动态小部件?

窗口小部件是应用程序的迷你版本,它为用户提供了浏览基础或从主屏幕或锁定屏幕使用其功能的基础。窗口小部件根据其提供的功能包含元素。小部件(以前称为Application的迷你版本)能够显示与Application类似的元素,通过本文,我们将演示Buttons的实现以及相应地如何将它们用于某些功能。这是相同的预览:

带有两个按钮的小部件,Activity1和Activity2

在小部件内创建按钮的步骤

步骤1:创建一个新项目

要在Android Studio中创建新项目,请参阅如何在Android Studio中创建/启动新项目请注意,选择Kotlin作为编程语言。

步骤2:将App小部件添加到项目中

  • 右键单击该应用程序,将光标移动到new ,最后找到“ Widget ”选项,然后选择它。

小部件屏幕截图

  • 指定小部件的必需属性,例如min.widthheight ,配置文件和首选语言等,然后继续。文件是自动生成的。

小部件屏幕截图

步骤3:要编程什么?在哪里编程?

  1. 在我们的应用程序中,由于我们希望显示两个名为“ Activity1 ”和“ Activity2 ”的按钮,因此我们需要在“资源”文件夹中“布局”内部的new_app_widget.xml文件中声明它们。
  2. 整个编程(后端)都在新创建的NewAppWidget.kt(主源文件夹中的Kotlin类文件)中完成。在这里,我们构造Buttons 。由于这些按钮会将用户重定向到不同的活动,因此我们需要创建两个空活动,我们分别将其命名为“ Activity1 ”和“ Activity2 ”。
  3. 这些活动用作待定意图,因为它们仅在用户单击按钮之一时才初始化。
  4. 对活动1和活动2前端文件进行了更改,以表示它们的名称。
  5. 只需参考下面的代码和下面给出的相应注释即可。
  • new_app_widget.xml和NewAppWidget.kt文件
XML

  
    
    


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///////////////////////////////////////


XML


  
    
  


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


  
    
  


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)
    }
}


XML


  
    
  


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)
    }
}


  • activity_1.xml,Activity1.kt,activity_2.xml,Activity2.kt文件

在这两个XML文件中,仅添加了TextView,而在Kotlin文件中,未添加任何内容。用户可以在这些文件中编写自己的代码作为他们的要求。

XML格式



  
    
  

科特林

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格式



  
    
  

科特林

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)
    }
}
  • activity_main.xml,MainActivity.kt文件

在activity_main.xml和MainActivity.kt文件中没有任何操作。用户可以在这些文件中编写自己的代码作为他们的要求。

XML格式



  
    
  

科特林

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)
    }
}

输出:在模拟器上运行

想要一个节奏更快,更具竞争性的环境来学习Android的基础知识吗?
单击此处前往由我们的专家精心策划的指南,以使您立即做好行业准备!