TransWikia.com

Как закрыть окно нажатием за пределами LinearLayout?

Stack Overflow на русском Asked by AlexSrc on February 14, 2021

**

Предыстория

**
Привет всем, возникла проблема с обработкой нажатия вне границ LinearLayout (обозначу LinearLayout(1)). Есть SrollView, в котором хранится множество LinearLayout, обработка нажатия которых реализовано с помощью onClick (если воспользоваться onTouch, то он будет реагировать на нажатие перед прокруткой)

Изначальный вид экрана

После нажатия на любой из LinearLayout(1), то затемняется фон и вылазит окно LinearLayout(2)

введите сюда описание изображения
**

Суть проблемы

**
Вот тут и начинается вся суть, я обрабатываю нажатие вне окна LinearLayout(2) этим кодом:

findViewById(R.id.frame).setOnTouchListener(new View.OnTouchListener() {
        public boolean onTouch(View view, MotionEvent event) {
            findViewById(R.id.frame).setOnTouchListener(new View.OnTouchListener() {
        public boolean onTouch(View view, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                Rect rect = new Rect();
                bell_settings.getHitRect(rect);
                if (!rect.contains((int) event.getX(), (int) event.getY())) {
                    SetAlpha(setting_msg, 500,  0, true, setting_msg.getAlpha(), 0);
                    ((EditText) findViewById(R.id.message)).setEnabled(false);
                    AnimationTranslation(setting_msg, "translationX", width, 500 );
                }
                return true;
            }
        }
    }

setting_msg – LinearLayout(2)

frame – родительский LinearLayout в котором хранятся все объекты

Когда я пытаюсь на эмуляторе нажать на место вне окна, то обрабатывается нажатие на LinearLayout(1), вместо нажатия на frame

Как мне сделать так, чтобы можно было обработать нажатие вне окна, вместо нажатие на LinearLayout(1)?

One Answer

У вас по сути есть 2 варианта:

  • Вы можете при открытии вашего layout сменять действие клик listener-a layout-a который внизу, чтоб он обрабатывал не клики, а закрытия, а после закрытия возвращать ему старый клик listener.

  • Второй вариант это добавить под layout который появляется поверх вашего основного layout-а еще один прозрачный layout, который и будет обрабатывать закрытие.

Ну или вообще можно создать отдельную Activity с прозрачным фоном и непрозрачным layout-ом. Но по сути все равно все сведется ко второму варианту.

Correct answer by Sergei Buvaka on February 14, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP