Android 用户会通过各种不同类型的设备(例如手机、平板电脑、可折叠设备和 Chromebook)访问您的应用。在与您的应用互动时(尤其是在大屏设备上),用户可能还会使用某种指控设备,例如三键鼠标。Android 应用支持为鼠标指针应用不同的样式,以帮助这些用户直观地了解他们可以与某个对象互动。
使用系统默认光标
用户熟悉在大屏设备上与不同类型的对象互动时所采用的不同惯例。Android 为开发者提供了一些用户熟悉的常见光标图标。您只需编写几行代码即可添加这些系统默认光标图标。我们来看一下下面的 Kotlin 代码段:
myView.setOnHoverListener { view, _ -> view.pointerIcon = PointerIcon.getSystemIcon(applicationContext, PointerIcon.TYPE_HAND) false // Listener did not consume the event. }
在此示例中,myView 是在特定条件下将设置为指针图标的视图。此处演示的条件是悬停状态,当鼠标指针位于视图上方时会发生这种情况。在其他场景中,您可能需要在处理期间显示等待图标,或者在游戏中显示十字线。
setOnHoverListener 会监听指针何时进入悬停状态,然后根据该事件采取行动。在事件监听器内部,系统会调用 view.pointerIcon 来设置相应视图的指针图标。使用现有的系统图标来设置指针的图标。
Android 中内置了多个系统图标;完整列表位于本页底部。使用了 TYPE_HAND 图标,该图标显示的是一只握紧的手,食指伸出。
使用您自己的特殊光标
// Loading a bitmap to use as a pointer icon BitmapFactory.decodeResource( this.resources, R.drawable.dollar_sign ), CURSOR_WIDTH, CURSOR_HEIGHT, false ) // Creating the pointer icon and sending clicks from the center of the mouse icon PointerIcon.create(dollarBitmap, (CURSOR_WIDTH/2).toFloat(), (CURSOR_HEIGHT/2).toFloat())
注意:热点的位置取决于您的使用场景。例如,绘图应用会将热点设置为笔尖或画笔尖。
示例
向应用添加指针图标是一种很好的方式,有助于用户在使用不同类型的设备时获得更直观的体验。有许多出色的默认系统图标可供使用,如果这些图标不符合您的需求,您随时可以加载或创建自己的图标。
-
拖放 - 如果您的应用支持从其他应用拖动内容并将其放到您的应用中,则可以实现
TYPE_NO_DROP图标。这样一来,系统就会直观地指示您的应用不支持正尝试拖放到应用中的 MIME 类型。 -
地图 - 如果您有地图应用,并且想向用户展示他们可以平移地图,那么当用户将鼠标悬停在地图上时,您可以提供一个显示
TYPE_GRAB图标的选项。当用户点击时,您可以将图标更新为抓取手,以表明用户正在平移地图。 -
照片编辑 - 照片编辑用户喜欢使用可选择放大镜进行放大的控件。选择放大模式后,您可以将光标更改为带有
TYPE_ZOOM_IN图标的放大镜。 - 以及更多机会
注意:如需查看不同的指针变化,请查看此 GitHub 指针示例
附录
其他阅读材料
系统默认光标
以下是 Android 系统中默认提供的光标。
| 光标名称 | 图标 |
|---|---|
| TYPE_ALIAS | ![]() |
| TYPE_ALL_SCROLL | ![]() |
| TYPE_ARROW | ![]() |
| TYPE_CELL | 单元格光标 |
| TYPE_CONTEXT_MENU | ![]() |
| TYPE_COPY | ![]() |
| TYPE_CROSSHAIR | ![]() |
| TYPE_DEFAULT | ![]() |
| TYPE_GRAB | ![]() |
| TYPE_GRABBING | ![]() |
| TYPE_HAND | ![]() |
| TYPE_HELP | ![]() |
| TYPE_HORIZONTAL_DOUBLE_ARROW | ![]() |
| TYPE_NO_DROP | ![]() |
| TYPE_NULL | 不显示光标 |
| TYPE_TEXT | ![]() |
| TYPE_TOP_LEFT_DIAGONAL_DOUBLE_ARROW | ![]() |
| TYPE_TOP_RIGHT_DIAGONAL_DOUBLE_ARROW | ![]() |
| TYPE_VERTICAL_DOUBLE_ARROW | ![]() |
| TYPE_VERTICAL_TEXT | ![]() |
| TYPE_WAIT | ![]() |
| TYPE_ZOOM_IN | ![]() |
| TYPE_ZOOM_OUT | ![]() |




















