2010-08-06 104 views
2

我遇到了一些實現自定義進度對話框的困難。即使疊加層截取觸摸事件,用戶仍然可以操作軌跡球並單擊應該禁用的元素。在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(); 
} 

回答

0

檢查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

0

重寫onTrackballEvent()不起作用。 嘗試覆蓋dispatchTrackballEvent(),不做任何事情只是返回true ;.

1

爲了防止您的軌跡球在您的活動出現在屏幕上時執行任何操作,請將以下代碼添加到您的活動子類中。

@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