Android - 防止在 PopupWindow 之外单击按钮
Android - Prevent button click outside of PopupWindow
我花了一段时间试图让它工作,在网上寻找类似的解决方案,但 none 似乎工作。我需要我的 PopupWindow 仅在单击生成按钮时被关闭,而不是在 window 之外单击。以前有人遇到过这个问题吗?
private void LoadRAMSPopup() {
mainLayout.getForeground().setAlpha(150);
LayoutInflater layoutInflater = (LayoutInflater) getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE);
final View ramsView = layoutInflater.inflate(R.layout.popup_rams, null);
final PopupWindow popupRAMS = new PopupWindow(
ramsView,
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT
);
if (Build.VERSION.SDK_INT >= 21) {
popupRAMS.setElevation(5.0f);
}
findViewById(R.id.mainLayout).post(new Runnable() {
@Override
public void run() {
popupRAMS.showAtLocation(findViewById(R.id.mainLayout), Gravity.CENTER, 0, 0);
popupRAMS.setOutsideTouchable(false);
popupRAMS.setFocusable(true);
popupRAMS.update();
Button btnGenerate = (Button) ramsView.findViewById(R.id.btnGenerate);
btnGenerate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getApplicationContext(), CreateRAMSActivity.class);
startActivity(intent);
popupRAMS.dismiss();
mainLayout.getForeground().setAlpha(0);
}
});
}
});
}
正在设置 popupRAMS.setFocusable(假)。删除使弹出 window 消失所需的不必要的触摸。所以请更换
popupRAMS.setFocusable(true);
和
popupRAMS.setFocusable(false);
也尝试添加
popupRAMS.setOutsideTouchable(false);
希望对您有所帮助。
使用
dialog_obj.setCancelable(false)
试试这个
popupRAMS.setBackgroundDrawable(new ColorDrawable(ContextCompat.getColor(context, android.R.color.transparent)));
popupRAMS.setOutsideTouchable(false);
我尝试了所有其他解决方案,对我有用的是在构造函数上设置“false”
mDiscountPopUp = new PopupWindow(discountPopUpView, WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.WRAP_CONTENT, false); // Creation of popup
我花了一段时间试图让它工作,在网上寻找类似的解决方案,但 none 似乎工作。我需要我的 PopupWindow 仅在单击生成按钮时被关闭,而不是在 window 之外单击。以前有人遇到过这个问题吗?
private void LoadRAMSPopup() {
mainLayout.getForeground().setAlpha(150);
LayoutInflater layoutInflater = (LayoutInflater) getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE);
final View ramsView = layoutInflater.inflate(R.layout.popup_rams, null);
final PopupWindow popupRAMS = new PopupWindow(
ramsView,
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT
);
if (Build.VERSION.SDK_INT >= 21) {
popupRAMS.setElevation(5.0f);
}
findViewById(R.id.mainLayout).post(new Runnable() {
@Override
public void run() {
popupRAMS.showAtLocation(findViewById(R.id.mainLayout), Gravity.CENTER, 0, 0);
popupRAMS.setOutsideTouchable(false);
popupRAMS.setFocusable(true);
popupRAMS.update();
Button btnGenerate = (Button) ramsView.findViewById(R.id.btnGenerate);
btnGenerate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getApplicationContext(), CreateRAMSActivity.class);
startActivity(intent);
popupRAMS.dismiss();
mainLayout.getForeground().setAlpha(0);
}
});
}
});
}
正在设置 popupRAMS.setFocusable(假)。删除使弹出 window 消失所需的不必要的触摸。所以请更换
popupRAMS.setFocusable(true);
和
popupRAMS.setFocusable(false);
也尝试添加
popupRAMS.setOutsideTouchable(false);
希望对您有所帮助。
使用
dialog_obj.setCancelable(false)
试试这个
popupRAMS.setBackgroundDrawable(new ColorDrawable(ContextCompat.getColor(context, android.R.color.transparent)));
popupRAMS.setOutsideTouchable(false);
我尝试了所有其他解决方案,对我有用的是在构造函数上设置“false”
mDiscountPopUp = new PopupWindow(discountPopUpView, WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.WRAP_CONTENT, false); // Creation of popup