2017-03-06 27 views
1

私は、アクティビティのボタンがクリックされたときにポップアップするポップアップウィンドウを持っています。ダイアログは画面全体をカバーし、3つのボタンしか含まれていません。ボタンをクリックすると、それに応じて機能します。しかし、ユーザーがボタン以外のポップアップに触れると、ポップアップを消してほしい。私は次のコードを試しました。Androidでポップアップを解除するにはどうすればよいですか?

popupWindow.setOutsideTouchable(true); 
popupWindow.showAtLocation(layout, Gravity.FILL, 0, 0); 

popupWindow.setTouchInterceptor(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     if (event.getAction() == MotionEvent.ACTION_DOWN) { 
      popupWindow.dismiss(); 
      return true; 
     } 
     return false; 
    } 
}); 

しかし、動作しませんでした。また、私はこれを設定:

popupWindow.setFocusable(true); 

popupWindow.setTouchable(true); 

マイポップアップレイアウトは次のようになります。私は、これらの二つのボタンを除いて、このポップアップ上の任意の場所をクリックした場合

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/popup_element" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="#80000000" 
android:gravity="center_vertical" 
android:orientation="vertical" 
android:padding="10px"> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:padding="16dp"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:orientation="vertical" 
     android:padding="10dp"> 

     <ImageButton 
      android:id="@+id/voiceCall" 
      android:layout_width="100dp" 
      android:layout_height="100dp" 
      android:layout_gravity="center|center_horizontal" 
      android:background="@drawable/round_button" 
      android:padding="15dp" 
      android:scaleType="fitCenter" 
      android:src="@drawable/ic_call_black_24dp" /> 

     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:gravity="center" 
      android:text="Voice Call" 
      android:textColor="#ffffff" 
      android:textSize="20dp" /> 
    </LinearLayout> 
</LinearLayout> 

enter image description here

は、私はそれを却下することにしたいです。 何も私には役に立たない。誰も私にこれを行う方法を提案することはできますか?また、デバイスの戻るボタンをクリックすると、ポップアップが消えてしまいます。あなたがsetTouchInterceptorを使用し、すべてのその理由

+0

のplsは私が却下()関数を使用するときにそれを得ることはありません、あなたのレイアウトファイル –

答えて

1

あなたはsetOnClick lis 2つのボタンが存在する線形レイアウトのためのテナー。

popupWindow.setOutsideTouchable(true); 
popupWindow.setCancelable(true); 

それが正常に動作します: - このように...ここで

linearlayout.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       popupWindow.dismiss(); 
      } 
     }); 
+0

@sangeetaこれは試しましたか? –

+1

これは働いた。ご協力ありがとうございました。 – sangeeta

+0

あなたは大歓迎です! –

0

だけpopupWindow.dismiss();を使用..

+1

を共有しています。 – sangeeta

+0

あなたはその中のputを却下したいと思っています... –

+1

ポップアップのボタン以外の場所でイベントを捕まえるには? – sangeeta

1

はあなたが意味するか:

popupWindow.setCancelable(true); 

または

popupWindow.setCanceledOnTouchOutside(true); 

ビルダーレベルまたはダイアログレベルに依存@ update2:

// set a listener to listen your popup window click event 
popupWindow.getContentView().setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     popupWindow.dismiss(); 
    } 
}); 

バックBTNをクリックすると、表示されているかどうか確認してください。

@Override 
public void onBackPressed() { 
    if(popupWindow.isShowing()) { 
     popupWindow.dismiss(); 
     return; 
    } 
    super.onBackPressed(); 
} 
+0

私はPopupWindowのオブジェクトを使用しているので、そのようなメソッドはありません。 – sangeeta

+0

申し訳ありません、お待ちください – Alan

+0

私はすでにそれを行っています。うまくいきませんでした。 – sangeeta

0

をpopupWindowがAlertDialogのオブジェクトである場合、あなたはこの活性のコードスニペットを試してみてください

dialog.setCanceledOnTouchOutside(true); 
+0

PopupWindowのオブジェクトです。 – sangeeta

0

を使用することができますあなたのポップアップが表示される場所:

@Override 
    public void onBackPressed() { 
     super.onBackPressed(); 
     popupWindow.setOutsideTouchable(true); 
     popupWindow.dismiss(); 

} 
+0

申し訳ありませんが、機能しませんでした。 – sangeeta

1

が答えているだけで以下のように書く

! 答えが役に立ったら投票してください。

0

まず、レイアウトの幅と高さをwrap_contentにして、残りの画面を表示できるようにします。 次に、setCancelable()属性をtrueにすることができます。 popupWindow.setCancelable(true);

または popupWindowを使用できます。dismiss(); EXをオーバーライドするあなたのonBackPress()メソッド内

: -

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    popupWindow.dismiss(); 
} 
関連する問題