在Android中禁用轨迹球点击

问题描述:

我遇到了一些实现自定义进度对话框的困难。即使叠加层截取触摸事件,用户仍然可以操作轨迹球并单击应该禁用的元素。在Android中禁用轨迹球点击

有没有办法解决这个问题?

编辑:这里是一个解决方案

//===================================================================================== 
protected void showProgressIndicator() 
{ 
    progressIndicator_.show(); 
} 

//===================================================================================== 
@Override 
public boolean onTrackballEvent(MotionEvent event) 
{ 
    return progressIndicator_.getVisibility() == View.VISIBLE; 
} 

//===================================================================================== 
protected void hideProgressIndicator() 
{ 
    progressIndicator_.hide(); 
} 

的再show方法

//===================================================================================== 
public void show() 
{ 
    setVisibility(VISIBLE); 
    if (animationHandler_ != null) 
     return; 

    animationHandler_ = new Handler(); 
    animationHandler_.post(animateTask_); 
    requestFocus(); 
} 

检查onTrackballEvent()方法。然后尝试在方法中直接返回true而不做任何事情。这应该立即杀死事件。

+0

您的解决方案并不完全正确,因为用户无法以跟踪球的方式导航,但他可以点击它。所以如果一个按钮集中,他仍然可以点击它。解决方案只是从进度对话框中请求foucs并执行nTrackballEvent()。感谢您的咨询:) – 2010-08-06 16:17:07

+0

可以请你发布解决方案? – Pria 2010-08-27 06:14:45

+0

你有可能发布通用代码吗? – 2011-02-08 14:24:38

重写onTrackballEvent()不起作用。 尝试覆盖dispatchTrackballEvent(),不做任何事情只是返回true ;.

为了防止您的轨迹球在您的活动出现在屏幕上时执行任何操作,请将以下代码添加到您的活动子类中。

@Override 
public boolean dispatchTrackballEvent(android.view.MotionEvent ev) { 
    return true; 
}; 

我已经在谷歌Nexus One手机上测试过它,它工作正常。

+0

我可以使用这种技术关闭模拟器中的轨迹球吗? – 2012-09-27 07:15:50

+1

@MoJo它可以工作,因为它重写了even并且不会调用基类。回归真实也很重要,因为它会告诉Android你吃了这个事件。 – ForceMagic 2014-05-21 17:37:37