Отключить нажатие трекбола в Android

#android #trackball

#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();
}
  

Ответ №1:

Чтобы ваш трекбол ничего не делал во время вашего действия на экране, добавьте следующий код в свой подкласс Activity.

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

Я протестировал это на телефоне Google Nexus One, и он работает нормально.

Комментарии:

1. могу ли я отключить трекбол в эмуляторе, используя этот метод?

2. @MoJo это работает, поскольку переопределяет четность и не вызывает базовый класс. Возврат true также важен, поскольку он сообщит Android, что вы пропустили событие.

Ответ №2:

Проверьте метод onTrackballEvent(). Затем попробуйте напрямую вернуть true в методе, ничего в нем не делая. Это должно сразу остановить событие.

Комментарии:

1. Ваше решение не совсем правильное, потому что пользователь не может перемещаться с помощью трекбола таким образом, но он может щелкнуть по нему. Таким образом, если кнопка сфокусирована, он все равно может нажать на нее. Решение состояло в том, чтобы просто запросить foucs из диалогового окна выполнения и внедрить nTrackballEvent(). Спасибо за ваш совет 🙂

2. не могли бы вы опубликовать решение, пожалуйста?

Ответ №3:

Переопределение onTrackballEvent() не работает. Попробуйте переопределить dispatchTrackballEvent(), ничего в нем не делайте, просто верните true;.