【问题标题】:Disable trackball click in Android在 Android 中禁用轨迹球点击
【发布时间】:2011-03-26 08:02:23
【问题描述】:

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

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

编辑:这是一个解决方案

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

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

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

一个then in show方法

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

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

【问题讨论】:

    标签: android trackball


    【解决方案1】:

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

    【讨论】:

    • 您的解决方案并不完全正确,因为用户无法以这种方式使用轨迹球导航,但他可以单击它。所以如果一个按钮被聚焦,他仍然可以点击它。解决方案只是从进度对话框中请求焦点并实现 nTrackballEvent()。谢谢你的建议:)
    • 你能发布解决方案吗?
    【解决方案2】:

    覆盖 onTrackballEvent() 不起作用。 尝试覆盖 dispatchTrackballEvent(),什么都不做,只返回 true;。

    【讨论】:

      【解决方案3】:

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

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

      我在 Google Nexus One 手机上对此进行了测试,效果很好。

      【讨论】:

      • 我可以使用这种技术在模拟器中关闭轨迹球吗?
      • @MoJo 它确实有效,因为它覆盖了偶数并且不调用基类。返回 true 也很重要,因为它会告诉 Android 你吃了这个事件。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-13
      相关资源
      最近更新 更多