我已经将一个Blackberry 4.6.0应用程序移植到了4.7.0的风暴上。 除了我试图控制的触摸事件之外,一切都很好。 我在下面的方法中捕获触摸事件,这样做的确如此,但问题是 在我的touchEvent中的逻辑执行并返回菜单(通过菜单按钮激活后)总是显示。 我试过返回false,true和super.touchEvent(消息),但它仍然出现。
有关如何阻止菜单在捕获触摸事件后出现的任何想法?
protected boolean touchEvent(TouchEvent message)
{
if (message.getEvent() == TouchEvent.CLICK)
{
//My code here
}
}
非常感谢您的想法
答案 0 :(得分:6)
只是为了澄清哈格姆的回答:
将TouchEvent.CLICK发送到您的应用程序后,还会发送navigationClick事件。这是出于兼容性原因,因此即使没有明确编写应用程序以响应touchEvents,ButtonFields之类的东西也可以在触摸屏设备上运行。
如果应用中的某个字段未使用navigationClick事件(返回true),则会显示上下文菜单。
如果您在单击按钮字段时看到此行为,则说明默认情况下,ButtonFields不会消耗点击事件。我发现总是使用以下样式位设置ButtonFields是一个好习惯:
ButtonField myButtonField =
new ButtonField( ButtonField.CONSUME_CLICK | ButtonField.NEVER_DIRTY );
haagmm的代码是一种解决方案,但更好的想法是复制TouchEvent.CLICK处理代码并将其粘贴到navigationClick方法中。这样,像BlackBerry Tour这样的轨迹球设备仍然可以使用你的应用程序。
答案 1 :(得分:3)
如果您“点击”屏幕或在SIM卡中单击鼠标左键,您将触发上下文菜单,类似于您在4.6设备上单击轨迹球。
您需要在您重载touchEvent的字段中执行与此类似的操作:
protected boolean navigationClick(int status, int time) { return true; }