如何在 Android 应用中创建静态快捷方式?
一个应用程序可能包含为用户提供的多种服务,并且为了方便用户快速使用这些服务,使用了快捷方式。应用程序的快捷方式是功能列表(快速服务),可帮助用户轻松快速地跳转到应用程序中的特定功能或活动。根据提供的服务列出和构建快捷方式。当长按应用程序图标时,应用程序的快捷方式(如果它们是明确构建的)可以被视为项目列表,如下所示。
在本文中,让我们演示应用程序中各种活动的固定(静态)快捷方式的实现。但首先,我们需要知道这里的静态是什么意思。静态快捷方式是一组在应用程序中硬编码的预定义快捷方式。它们不会随着时间或用户操作而改变。它们是固定的,可以随时访问,即使应用程序没有在后台运行。关于快捷方式,一个应用程序最多只能有 4 个快捷方式。如果在程序中声明了多个快捷方式,则列表中只有前四个快捷方式可用。这是为了改善快捷方式的视觉外观。
方法
步骤 1:创建一个新项目
请参阅如何在 Android Studio 中创建/启动新项目以创建空 Activity。请注意,使用Kotlin作为该项目的主要语言。
第 2 步:在 res/xml 文件夹中创建一个 Android 资源文件 (xml)
转到res -> Android 资源文件并创建一个 android 资源文件,如下所示。
创建一个文件,我们可以在其中存储所有快捷方式。在我们编写所有快捷方式的地方创建了一个具有 XML 格式的 Android 资源文件。保存此文件的文件路径是res/xml/shortcuts.xml 。无需更改任何其他参数,然后单击OK 。
生成文件后,可以声明快捷方式,但在此之前,在 Android Manifest 中声明元数据以链接 shortcuts.xml文件作为应用程序的资源。
第 3 步:将快捷方式.xml 文件声明为应用程序快捷方式的资源
在AndroidManifest.xml文件中,元数据将在 Activity 中声明,如下面的代码所示。
AndroidManifest.xml
shortcuts.xml
Activity1.xml
Activity1.kt
package org.geeksforgeeks.static_shortcuts
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)
}
}
Activity2.xml
Activity2.kt
package org.geeksforgeeks.static_shortcuts
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)
}
}
Activity3.xml
Activity3.kt
package org.geeksforgeeks.static_shortcuts
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
class Activity3 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_3)
}
}
activity_main.xml
MainActivity.kt
package org.geeksforgeeks.static_shortcuts
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//Just to check if these buttons starts other activities
// Declaring Buttons
val btn1 = findViewById
Strings.xml
Static_Shortcuts
MainActivity
Activity 1
Activity 2
Activity 3
第 4 步:将 App Gradle 中的 Target SDK 版本设置为 26
只有API 级别 25 及以上的 Android 设备才支持快捷方式。为确保安全,请将targetSDKVersion设置为26 。
步骤 5:配置快捷方式.xml 文件以生成不同的快捷方式
由于这是一个 XML 文件,因此该文件的结构将采用分层元素的形式。
快捷方式元素的参数: Elements Description A string literal, which represents the shortcut when a ShortcutManager object performs operations on it. Determines whether the user can interact with the shortcut from a supported launcher, either true or false. A concise phrase that describes the shortcut’s purpose up to 10 characters. An extended-phrase that describes the shortcut’s purpose up to 25 characters. The message that appears in a supported launcher when the user attempts to launch a disabled shortcut.android:shortcutID android:enabled android:shortcutShortLabel android:shortcutLongLabel android:shortcutDisabledMessage android:icon Displaying icon against the shortcut.
通过右键单击它并单击图像/矢量资源,将在res/drawable文件夹中创建一个图标。请参考下图。
选择矢量资产并选择剪贴画,将其命名为icon.xml ,如下所示。
意图参数: Parameters Descriptionandroid:action The action that the system launches when the user selects the shortcut. android:targetPackage Package of the application. android:targetClass Class of the application where the shortcut wants users to redirect.
shortcuts.xml 文件的代码:
只是为了可视化快捷方式,需要参数shortcutID、enabled、icon、shortcutShortLabel,其余可以忽略。这些值是随机的,并在res/values/ 字符串.xml文件中定义,该文件可在本文后面的部分中找到。在这里,Intents 的行为方式与将用户从一个活动发送到另一个活动时的行为相同。当用户按住应用程序图标 2 秒时,会出现 4 个快捷方式,点击打开应用程序的哪些不同活动。请参阅以下程序中的注释。
Note:
android:targetClass=”org.geeksforgeeks.static_shortcuts.MainActivity”
android:targetPackage=”org.geeksforgeeks.static_shortcuts”
Remember that input your project package name here.
快捷方式.xml
第 6 步:为快捷方式创建不同的活动
要检查快捷方式是否将用户引导至不同的活动,请在项目中再添加 3 个活动:活动 1、活动 2 和活动 3。这些活动也在上述代码中实现。以下是这些活动的前端代码。 Activity1.kt、Activity2.kt、Activity3.k t 代码相同。
活动1.xml
活动1.kt
package org.geeksforgeeks.static_shortcuts
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)
}
}
活动2.xml
Activity2.kt
package org.geeksforgeeks.static_shortcuts
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)
}
}
活动3.xml
Activity3.kt
package org.geeksforgeeks.static_shortcuts
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
class Activity3 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_3)
}
}
第七步:配置 MainActivity.kt 和 activity_main.xml
MainActivity.kt是应用程序的主要活动和第一个活动。添加了按钮以导航到其他活动。请参阅代码中的注释。
activity_main.xml
MainActivity.kt
package org.geeksforgeeks.static_shortcuts
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//Just to check if these buttons starts other activities
// Declaring Buttons
val btn1 = findViewById(R.id.btn1)
val btn2 = findViewById(R.id.btn2)
val btn3 = findViewById(R.id.btn3)
// Intents when buttons are pressed
// Takes to Activity 1
btn1.setOnClickListener
{
startActivity(Intent(this, Activity1::class.java))
}
// Takes to Activity 2
btn2.setOnClickListener
{
startActivity(Intent(this, Activity2::class.java))
}
// Takes to Activity 3
btn3.setOnClickListener
{
startActivity(Intent(this, Activity3::class.java))
}
}
}
第 8 步:修改 Strings.xml 文件
这些字符串值(compose….label1, label2, label3, label0) 在下面声明 res/values/ 字符串.xml定义了在快捷方式列表展开时作为快捷方式标签显示的字符串。
字符串.xml
Static_Shortcuts
MainActivity
Activity 1
Activity 2
Activity 3