先决条件
- 如何创建Android应用程序的基本小部件?
- 如何创建Android应用程序的动态小部件?
窗口小部件是应用程序的迷你版本,它为用户提供了浏览基础或从主屏幕或锁定屏幕使用其功能的基础。窗口小部件根据其提供的功能包含元素。小部件(以前称为Application的迷你版本)能够显示与Application类似的元素,通过本文,我们将演示Buttons的实现以及相应地如何将它们用于某些功能。这是相同的预览:
在小部件内创建按钮的步骤
步骤1:创建一个新项目
要在Android Studio中创建新项目,请参阅如何在Android Studio中创建/启动新项目。请注意,选择Kotlin作为编程语言。
步骤2:将App小部件添加到项目中
- 右键单击该应用程序,将光标移动到new ,最后找到“ Widget ”选项,然后选择它。
- 指定小部件的必需属性,例如min.width和height ,配置文件和首选语言等,然后继续。文件是自动生成的。
步骤3:要编程什么?在哪里编程?
- 在我们的应用程序中,由于我们希望显示两个名为“ Activity1 ”和“ Activity2 ”的按钮,因此我们需要在“资源”文件夹中“布局”内部的new_app_widget.xml文件中声明它们。
- 整个编程(后端)都在新创建的NewAppWidget.kt(主源文件夹中的Kotlin类文件)中完成。在这里,我们构造Buttons 。由于这些按钮会将用户重定向到不同的活动,因此我们需要创建两个空活动,我们分别将其命名为“ Activity1 ”和“ Activity2 ”。
- 这些活动用作待定意图,因为它们仅在用户单击按钮之一时才初始化。
- 对活动1和活动2前端文件进行了更改,以表示它们的名称。
- 只需参考下面的代码和下面给出的相应注释即可。
- 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的基础知识吗?
单击此处前往由我们的专家精心策划的指南,以使您立即做好行业准备!