我有一个带9个按钮的Android应用。这个应用程序在2.36上运行,是设备上唯一的应用程序(或者至少是我们允许用户使用的唯一应用程序 - 我们将设备预装为我们销售的工业产品套件的一部分。)
所有按钮都转到同一个处理程序,并通过其标记进行排序。处理程序在XML中指定:
<Button android:id="@+id/IdleButton"
android:layout_marginLeft="5dp"
android:background="@drawable/idle18pt_he_normal"
android:hapticFeedbackEnabled="true"
android:layout_width="92dp"
android:layout_height="92dp"
android:tag="0"
android:onClick="theButtonHandler">
</Button>
当用户按下按钮时,我想启用触觉反馈,即振动。有没有办法在XML中执行此操作,或者如果没有,是否有办法在我的 onClick()处理程序中执行此操作?
我在Android上看到的针对触觉反馈的网络示例(例如,http://androidcookbook.com/Recipe.seam?recipeId=1242)似乎主要涉及对清单的更改,对XML的更改(您可以看到我已经启用)它在我的XML中,然后为按钮声明,初始化和实现一个单独的Touch处理程序。这似乎很多工作,特别是因为我有9个按钮。
由于我的所有按钮只有一个onClick处理程序,我可以在那里实现触觉反馈吗?
我需要做的就是点击&#34;点击&#34;当我点击我的一个按钮时发出的声音是勾选&#34; Audible selection&#34;在&#34;声音&#34;电话设置的一部分 - 根本没有编码。为什么触觉反馈变得如此复杂?
答案 0 :(得分:5)
创建一个继承自VibrateButton
的自定义Button
类,并添加此振动onClick
。你仍然需要在Manifest中要求权限,所以没有继承就没有什么可以做的。此示例代码采用from here,并进行振动。
import android.os.Vibrator;
...
Vibrator v = (Vibrator) this.context.getSystemService(Context.VIBRATOR_SERVICE);
// Vibrate for 500 milliseconds
v.vibrate(500);
注意:
不要忘记在AndroidManifest.xml文件中包含权限:
<uses-permission android:name="android.permission.VIBRATE"/>
声音可以自动设置为按钮的原因,但振动不能,它要求允许振动的权限相同。振动消耗电池(方式不仅仅是简单的声音),因此它影响电池持续时间,这需要以某种方式由最终用户批准。如果你看到,在大多数情况下,某些特定按钮(主要是键盘应用程序)可以选择“点击振动”,但这取决于每个应用程序。
PS:确保设备可以振动。在为Nexus 7 2012添加振动时,我有几个小时愚蠢地丢失了;它还没有振动模块。此外,请确保您可以禁用它,以延长电池使用时间。
答案 1 :(得分:0)
VIBRATE
权限。您可以使用任何performHapticFeedback()
,包括View
的{{1}}功能。
例如在Kotlin中以编程方式进行的操作
Button
这会使设备振动。
即使您没有view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS)
,也可以从Fragment
或Activity
的任何位置振动设备。
在Fragment中,您可以执行以下操作:
View
在“活动”中,您要做的是:
requireView().performHapticFeedback(HapticFeedbackConstants.LONG_PRESS)