#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;.