如何使用按钮来控制popupwindow show或dimiss?

时间:2016-10-27 03:17:18

标签: android popupwindow

我想用一个按钮来控制弹出窗口,当我点击按钮,弹出窗口显示,然后单击按钮,弹出窗口dimiss。 以下是我的代码:

@Override
public void onClick(View v) {
    showPopupWindow();
}

/*** button control the PopupWindow ***/
private void showPopupWindow() {
    View view = View.inflate(this, R.layout.popwindow_item, null);
    popupwindow = new PopupWindow(view, WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
    if (popupwindow.isShowing()) {  
        popupwindow.dismiss();
    }else {
        popupwindow.setOutsideTouchable(true);
        popupwindow.setBackgroundDrawable(new BitmapDrawable());
        popupwindow.showAsDropDown(title);
    }
    viewOfPop(view);
}

结果是,当我点击按钮时,弹出窗口总是显示,并且不会失败。 我也尝试使用一个标志private boolean isShow = false;,当我点击按钮时我将更改布尔值,但我不知道如何更改布尔值,当我点击时弹出窗口关闭popupwindow的外面。请帮助我,谢谢高级!

3 个答案:

答案 0 :(得分:2)

我认为你总是创建一个新的弹出窗口,尝试添加一个检查。

private void showPopupWindow() {
    if(popupwindow == null){
        View view = View.inflate(this, R.layout.popwindow_item, null);
        popupwindow = new PopupWindow(view, WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
    } 
    if (popupwindow.isShowing()) {  
        popupwindow.dismiss();
    }else {
        popupwindow.setOutsideTouchable(true);
        popupwindow.setBackgroundDrawable(new BitmapDrawable());
        popupwindow.showAsDropDown(title);
    }
    viewOfPop(view);
}

答案 1 :(得分:0)

mPopupWindow.setOutsideTouchable(true);

这使得您的PopupWindow会在其外部接收触摸事件包括您的按钮

当ACTION_DOWN发生时,您的PopupWindow将被解雇。

当ACTION_UP发生时,单击了Button,所以转到showPopupWindow()

这就是为什么当你点击按钮时,你的PopupWindow会闪烁并永远显示。

答案 2 :(得分:0)

我添加using UnityEngine; using System.Collections; public class ClickToMove : MonoBehaviour { NavMeshAgent agent; Animation _anim; void Start() { agent = GetComponent<NavMeshAgent>(); _anim = GetComponent<Animation>(); } void Update() { if (Input.GetMouseButtonDown(0)) { _anim.Play("Walk"); RaycastHit hit; if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit, 100)) { agent.destination = hit.point; } } } } ,确定