2016-03-19 3 views
0

Как уволить закусочной, когда пользователь взаимодействует в других местах, как способ приложение Gmail распускать закусочные, когда пользователь прокручивает, щелкает в другом месте, оставляет активность и т.д.Как отключить закусочную, когда пользователь взаимодействует в другом месте?

Такое поведение также было упомянуто в Material Design:

enter image description here

ответ

1

в руководящих принципах, которые вы указали в вашем государстве вопрос:

или взаимодействие с пользователем в других (таких как Вызвав новая поверхность или деятельность)

В нем ничего не говорится о ладонях или щелчках во время показа закуски.

Другими словами, до тех пор, пока пользователь остается в одном и том же действии, закусочная должна просто исчезнуть на своем собственном после таймаута или если пользователь деликатно вычистит его.

Кроме того, я проверил приложение Gmail Google, и snackbars не исчезают, если пользователь выполняет поиск на одном экране.

+1

В нем четко сказано, что «такие как ...», а не только вызов нового действия, но и щелчок, прокрутка, выход и т. Д. - это взаимодействие с пользователем и приложение Gmail немедленно отключают snackbars (до его таймаута), если вы пролистаете или щелкните любой где на экране. – Hafez

3

Возможно, переопределить dispatchTouchEvent в действии.

private Snackbar mSnackbar; 

@Override 
public boolean dispatchTouchEvent(MotionEvent ev) { 

    if (ev.getAction() == MotionEvent.ACTION_DOWN) { 
     if (mSnackBar != null && mSnackbar.isShown()) { 

       Rect sRect = new Rect(); 
       mSnackbar.getView().getHitRect(sRect); 

       //This way the snackbar will only be dismissed if 
       //the user clicks outside it. 
       if (!sRect.contains((int)ev.getX(), (int)ev.getY())) { 
        mSnackbar.dismiss(); 
        mSnackbar == null; 
       } 
     } 
    } 

    return super.dispatchTouchEvent(ev); 
} 

Благодаря замечанию Эме об улучшении этого. (Я не тестировал эту недавно отредактированную версию).

+0

Thx man..и хорошо работает – satti8893

+0

Добро пожаловать! Я рад, что это было полезно. –

+0

Вам не нужно обновлять «mSnackbarShown», вы можете использовать метод isShown для SnackBar, таким образом вам не нужно устанавливать обратный вызов, только с функцией dispatchTouchEvent. – Eme

Смежные вопросы