Как скрыть fab при нажатии в любом месте экрана?

Я использую плавающую кнопку действия. Я использую эту библиотеку, потому что мне нужен стиль почтового ящика. Проблема в том, что я могу закрыть плавающее меню действий, только щелкнув нижнюю панель. Что мне нужно, так это то, что если я щелкну где-нибудь еще на экране, тогда также фабрика должна рухнуть, как это происходит в приложении Inbox. Как добиться такого поведения? Есть ли в этой библиотеке какие-либо атрибуты, которые я могу использовать, или мне нужно реализовать это поведение самостоятельно?


person Amit Tiwari    schedule 01.10.2015    source источник
comment
Почему бы не установить его видимость Visibity.GONE? Вы можете добавить это к поведению onClick чего угодно в этом представлении.   -  person mgokgoz    schedule 01.10.2015


Ответы (4)


В библиотеке есть метод setClosedOnTouchOutside(boolean close), который вы можете использовать.

floatingActionMenu.setClosedOnTouchOutside(true);

Но это будет работать только для закрытой области FloatingActionMenu. Если вы хотите закрыть его, щелкнув в любом месте макета, попробуйте это.

person Hemanth    schedule 10.12.2015

Если вы используете compile 'com.getbase:floatingactionbutton:1.8.0'

и у вас есть плавающее меню действий, и вы хотите закрыть меню после щелчка в любом месте экрана, попробуйте это

FloatingActionsMenu = (FloatingActionsMenu) findViewById (R.id.fab_menu);

listView.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        if (floatingActionsMenu.isExpanded())
            floatingActionsMenu.collapse();
        return false;
    }
});

false ‹- заставляет просмотр продолжить прокрутку

person Misho Zhghenti    schedule 16.12.2015
comment
Вы можете объяснить, что здесь listView? - person Montassir Ld; 23.01.2017

Решение Мишо Жгенти для использования compile 'com.getbase:floatingactionbutton:1.8.0' неверно, поскольку оно определяет событие касания в listView. Это правильная реализация:

@Override public boolean dispatchTouchEvent(MotionEvent event){
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        if (fabMenu.isExpanded()) {
            Rect outRect = new Rect();
            fabMenu.getGlobalVisibleRect(outRect);
            if(!outRect.contains((int)event.getRawX(), (int)event.getRawY())) {
                fabMenu.collapse();
                return false;
            }
        }
    }
    return super.dispatchTouchEvent(event);
}

Работает в любом месте приложения, а не только в listView. Поместите это в свою деятельность.

person Montassir Ld    schedule 23.01.2017

@Override
public boolean dispatchTouchEvent(MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN){
        if (fam_main.isOpened()){
            Rect outRect = new Rect();
            fam_main.getGlobalVisibleRect(outRect);
            if (!outRect.contains((int)event.getRawX(), (int) event.getRawY())){
                fam_main.close(true);
            }
        }
    }
    return super.dispatchTouchEvent(event);
}

*** обратите внимание, что fam_main - это идентификатор вашего FAB-меню. FloatingActionMenu

person im-o    schedule 26.07.2019