Как закрыть окно нажатием за пределами LinearLayout?
**
Предыстория
** Привет всем, возникла проблема с обработкой нажатия вне границ 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)?
Ответы (1 шт):
У вас по сути есть 2 варианта:
Вы можете при открытии вашего layout сменять действие клик listener-a layout-a который внизу, чтоб он обрабатывал не клики, а закрытия, а после закрытия возвращать ему старый клик listener.
Второй вариант это добавить под layout который появляется поверх вашего основного layout-а еще один прозрачный layout, который и будет обрабатывать закрытие.
Ну или вообще можно создать отдельную Activity с прозрачным фоном и непрозрачным layout-ом. Но по сути все равно все сведется ко второму варианту.

