Android: Z-Order с широким экраном просмотра кликов

Редактировать: Решено. Проблема исчезла, когда я сделал все мои собственные представления переопределить кнопку вместо просмотра.

Я пытаюсь программно создать невидимое представление размера экрана, которое должно фиксировать все события щелчка, тем самым блокируя все базовые элементы. Но у меня проблемы.

Предполагаемая цель заключается в том, чтобы, когда пользователь нажимает определенную кнопку, создается меню. Когда это меню открыто, другие кнопки, которые были на странице, больше не должны функционировать. Нажатие на меню должно заставить вещи происходить, нажатие в любом другом месте должно заставить меню исчезнуть и заставить другие элементы работать снова.

Мне удалось создать широкоэкранное представление очень хорошо, и оно захватывает щелчки и разрушает меню всякий раз, когда пользователь нажимает на точку, которая еще не покрыта кнопкой. Однако когда пользователь нажимает на место, содержащее кнопку, обрабатывается только событие клика кнопки, а не моего кликблока. Это должно быть наоборот. Это заставляет меня думать, что это проблема z-порядка (но не уверен на 100%). К сожалению, я пытаюсь настроить таргетинг на более старые версии, которые не поддерживают view.setZ() и view.bringToFront(), похоже, не выполняет то, что я хочу.

Вот код для блокировщика просмотра:

public class ClickBlockerView extends View{

    public ClickBlockerView(Context context) {
        super(context);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        setMeasuredDimension(C.GetWindowWidth(getContext()), C.GetWindowHeight(getContext()));
    }

    public static ClickBlockerView CreateClickBlocker(Context context){
        ClickBlockerView c = new ClickBlockerView(context);
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        c.setLayoutParams(params);
        c.setId(R.id.clickBlocker);
        c.setClickable(true);
        return  c;
    }
}

И вот как я это называю (из другой точки зрения):

private void createMenuAndClickblocker(){
       ClickBlockerView clickblocker = ClickBlockerView.CreateClickBlocker(getContext());
       clickblocker.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    destroyMenu();
                }
        });
        ((RelativeLayout) this.getParent()).addView(clickblocker);
        clickblocker.bringToFront();

        createMenu();
        requestLayout();
    }

У кого-нибудь есть идеи как это исправить? Другие решения проблемы также приветствуются. Я бы предпочел не использовать xml (он должен быть добавлен к каждому виду деятельности)

Обновить:

По-видимому, z-упорядочение отлично сочетается с блеснами и флажками, но не с кнопками и моими пользовательскими представлениями. Странный...

Обновление 2:

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

0 ответов

Другие вопросы по тегам