0

ポップアップ ウィンドウをアニメーション化するアプリケーションを作成しています。それは私のコードでうまく機能していました。

デバイスで戻るボタンが押されたときに、ポップアップウィンドウを閉じたい(つまり、スライドダウンしたい)。

しかし、デバイスからのキーを聞くことができませんでした。そのポップアップウィンドウを使用setOnKeyListenerしましたが、ログも取得しませんでした。

私のコードは以下のとおりです。

popup_layout = layoutInflater.inflate(R.layout.popup_addchannel, null);
            popupWindow = new PopupWindow(popup_layout, LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
subscribeButton.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View view) {

//                  Log.d(TAG,
//                          "Button is clicked for animation....  Visibility is"
//                                  + subscribeButton.getVisibility());
                    openMenu(view);
                }
            });
popup_layout.setOnKeyListener(new View.OnKeyListener() {

                @Override
                public boolean onKey(View v, int keyCode, KeyEvent event) {
                    Log.d(TAG, "on key button click called.........");
                    return false;
                }

            });

public void openMenu(View view) {
        if (!flag) {
            popupWindow.setAnimationStyle(R.style.PopupWindowAnimation);
            popupWindow.showAtLocation(view.findViewById(R.id.button1),
                    Gravity.CENTER, 0, 0);
            popupWindow.setFocusable(true);
            popupWindow.update();
            flag = true;
        } else {
            popupWindow.dismiss();
            popupWindow.setFocusable(false);
            flag = false;
        }
    }

この背後にある問題は何ですか?

要件を達成できますか?

どうか、私を導いてください。

前もって感謝します!

4

6 に答える 6

3

これを試して....

    final PopupWindow popupWindow = new PopupWindow(popupView,
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,true);
    ...
    popupWindow.getContentView().setFocusableInTouchMode(true);
    popupMenu.getContentView().setOnKeyListener(new View.OnKeyListener() {        
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (keyCode ==  KeyEvent.KEYCODE_MENU && 
                    event.getRepeatCount() == 0 && 
                    event.getAction() == KeyEvent.ACTION_DOWN) {
                // ... payload action here. e.g. popupMenu.dismiss();
                return true;
            }                
            return false;
        }
    });
于 2013-04-23T06:51:04.223 に答える
1

セリフはバックプレスでセリフをキャンセルする性質があります。

dialog.setCancelable(true);

編集: このリンクで Qberticus の回答を確認してください: Android ポップアップ ウィンドウの却下

また、次のことも確認できます。ポップアップウィンドウを閉じる問題

于 2013-04-23T05:56:52.453 に答える
0

以下のように、アクティビティの onKeyPressed() メソッドをオーバーライドする必要があります。

@Override
public void onBackPressed() {
   super.onBackPressed();
   //your code to close the popup window.
   popupWindow.setAnimationStyle(R.style.PopupWindowAnimation);
   popupWindow.showAtLocation(view.findViewById(R.id.button1),
            Gravity.CENTER, 0, 0);
   opupWindow.setFocusable(true);
   popupWindow.update();
   flag = true;
}
于 2013-04-23T05:54:49.270 に答える
0
popupWindow.getContentView().setOnClickListener(new OnClickListener()) {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        popupWindow.dismiss();
    }
});

これを試して。

于 2013-08-13T22:31:51.103 に答える
0

ポップアップ ウィンドウでキーの押下を聞くことはできませんが、システム バック キーを聞くときに、dismiss()メソッドをオーバーライドして傍受できます。

于 2015-04-09T07:20:50.467 に答える
0

はい、これを使用できます dialog_obj.setCancelable(true);

于 2013-04-23T06:11:29.413 に答える