Выдача всплывающего окна

У меня есть всплывающее меню, которое появляется при нажатии кнопки. Это мой метод onclick.

<code>public void showOverflow(View view) {

    boolean click = true;
    Button action = (Button) findViewById(R.id.btbAction);

    LayoutInflater inflater = (LayoutInflater) main.this
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View popupView = inflater.inflate(R.layout.overflow_layout, null);
    final PopupWindow pw = new PopupWindow(popupView,
            LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    pw.setOutsideTouchable(true);
    if (click) {
        pw.showAsDropDown(action, 0, 0);
        click = false;
    } else {
        pw.dismiss();
        click = true;
    }
}
</code>

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

<code>pw.setOutsideTouchable(true);
</code>

Вещи остаются прежними. Пожалуйста, помогите мне исправить это

 Nikhil14 мая 2012 г., 06:52
Привет, пожалуйста, проверьте нижеstackoverflow.com/questions/8823606/…

Ответы на вопрос(2)

Решение Вопроса

Вы должны изменитьsetOutsideTouchable вызовите параметр дляtrue: pw.setOutsideTouchable(false);

Controls whether the pop-up will be informed of touch events outside of its window. This only makes sense for pop-ups that are touchable but not focusable, which means touches outside of the window will be delivered to the window behind. The default is false.

If the popup is showing, calling this method will take effect only the next time the popup is shown or through a manual call to one of the update() methods.

Parameters: touchable true if the popup should receive outside touch events, false otherwise

С другой стороны, что такоеclick локальная переменная должна делать? Это установлено вtrueтак что это всегда заставитpw всплывать, когдаshowOverflow метод вызывается, и без причины он установлен вfalse позже, потому что его жизненный цикл заканчивается, когда вы покидаете этот метод.

Ваш код должен выглядеть примерно так:

private LayoutInflater inflater;
private Button action;
private PopupWindow pw;
private View popupView;
/*
 * (non-Javadoc)
 * @see android.app.Activity#onCreate(android.os.Bundle)
 */
@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash);
    inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    popupView = inflater.inflate(R.layout.overflow_layout, null, false);

    action = (Button) findViewById(R.id.action);
    action.setOnClickListener(this);
}

public void showOverflow()
{
    pw = new PopupWindow(getApplicationContext());
    pw.setWidth(WindowManager.LayoutParams.WRAP_CONTENT);
    pw.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);
    pw.setOutsideTouchable(true);

    pw.setContentView(popupView);
    pw.showAsDropDown(action, 0, 0);
}

getApplicationContext() следует использовать в случае, если вы находитесь внутриActivity учебный класс. В противном случае вы должны получитьContext в качестве параметра.

 darsh14 мая 2012 г., 07:24
все, что я хочу - это закрыть всплывающее окно (во всплывающем состоянии), когда я щелкаю за окном в основной деятельности. Локальная переменная click устанавливается в true, когда всплывающее окно активно. поэтому, когда выполняется другой щелчок, я проверяю, является ли логический щелчок ложным, чтобы я мог закрыть всплывающее окно. Не знаю, правильно ли я это делаю.
 darsh14 мая 2012 г., 08:48
Я пытался изменить свой код. К сожалению, приложение принудительно закрывается
 darsh14 мая 2012 г., 07:25
пробовал pw.setOutsideTouchable (false); всплывающее окно не исчезает, когда я касаюсь снаружи
 14 мая 2012 г., 08:50
а что говорит LogCat? Не могли бы вы также вставить трассировку стека ошибки?
 14 мая 2012 г., 08:18
пожалуйста, смотрите мое обновление для использования контекста в созданииPopupWindow,setOutsideTouchable Метод может быть изменен, если вам нужно, чтобы ваше всплывающее окно было фокусируемым / сенсорным. В этом случае вам потребуется сенсорный перехватчик, чтобы закрыть всплывающее окно, когдаMotionEvent.ACTION_OUTSIDE происходит.

менятьpw.setOutsideTouchable(true); вpw.setOutsideTouchable(false);

Ваш ответ на вопрос