android - 如何在没有按钮的情况下关闭 AlertDialog.Builder

标签 android

当我的警报弹出时,我希望它在再次触摸时关闭,而不向其添加任何按钮。

所以在 map 上用大头针触摸

@Override
    protected boolean onTap(int i) {
        OverlayItem item = items.get(i);    
        dialog.setTitle(item.getSnippet());
        dialog.setMessage(item.getTitle());
        dialog.show();
        return (true);
    }

那么如何通过触摸警报或背景中的任何位置来让它消失。

编辑:添加代码

 private class SitesOverlay extends ItemizedOverlay<CustomItem> {
private Drawable heart=null;
private List<CustomItem> items=new ArrayList<CustomItem>();
private PopupPanel panel=new PopupPanel(R.layout.popup);

public SitesOverlay() {
  super(null);

  heart=getMarker(R.drawable.heart_full);

  JSONObject json;
  JSONObject json2;
  String resultURL = queryRESTurl("http://www.kickintheapp.com/api/maps393/json.json");
  try {
      json = new JSONObject(resultURL);

  JSONArray nameArray = json.names();

  JSONArray valArray;

      valArray = json.toJSONArray(nameArray);


  for (int i = 0; i < valArray.length(); i++) 
  {

      Log.e(nameArray.getString(i), valArray.getString(i));
      json2 = new JSONObject(valArray.getString(i));
      JSONArray nameArray2 = json2.names();

      JSONArray valArray2 = json2.toJSONArray(nameArray2);
      for (int a = 0; a < valArray2.length(); a++) 
      {

          // add to maps here
          items.add(new CustomItem(getPoint(valArray2.getDouble(3),valArray2.getDouble(2)), valArray2.getString(1), valArray2.getString(0),getMarker(R.drawable.pin_yellow), heart));
          Log.e(nameArray2.getString(a), valArray2.getString(a));
      }
   }
  } catch (JSONException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
  }

  populate();
}

@Override
protected CustomItem createItem(int i) {
  return(items.get(i));
}

@Override
public void draw(Canvas canvas, MapView mapView,
                  boolean shadow) {
  super.draw(canvas, mapView, shadow);

}

@Override
protected boolean onTap(int i) {
    OverlayItem item=getItem(i);
    GeoPoint geo=item.getPoint();
    Point pt=map.getProjection().toPixels(geo, null);

    View view=panel.getView();

    ((TextView)view.findViewById(R.id.latitude))
      .setText(item.getSnippet());
    ((TextView)view.findViewById(R.id.longitude))
      .setText(item.getTitle());

    panel.show(pt.y*2>map.getHeight());

    return(true);
}

class PopupPanel {
   View popup;
   boolean isVisible=false;

 PopupPanel(int layout) {
   ViewGroup parent=(ViewGroup)map.getParent();

   popup=getLayoutInflater().inflate(layout, parent, false);

   popup.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
      hide();
    }
  });
}

View getView() {
  return(popup);
}

void show(boolean alignTop) {
  RelativeLayout.LayoutParams lp=new RelativeLayout.LayoutParams(
        RelativeLayout.LayoutParams.WRAP_CONTENT,
        RelativeLayout.LayoutParams.WRAP_CONTENT
  );

  if (alignTop) {
    lp.addRule(RelativeLayout.ALIGN_PARENT_TOP);
    lp.setMargins(0, 20, 0, 0);
  }
  else {
    lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
    lp.setMargins(0, 0, 0, 60);
  }

  hide();

  ((ViewGroup)map.getParent()).addView(popup, lp);
  isVisible=true;
}

void hide() {
  if (isVisible) {
    isVisible=false;
    ((ViewGroup)popup.getParent()).removeView(popup);
  }
 }
}

最佳答案

有什么不使用 PopupWindow 的特殊原因吗?它可以让您很容易地收到“内部”和“外部”触摸事件的通知。

关于android - 如何在没有按钮的情况下关闭 AlertDialog.Builder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10523051/

相关文章:

java - 将应用程序设置为启动器?

android - MVP 模型中需要上下文

android - 如何在 Android 中同时对 View 进行动画、缩放和变换?

android - ColorPicker 对话框未在 android 中显示

Android 2.2 平板相机问题

java - 尝试创建位图时出现 NullPointerException

android - android 2.3 上的 Navigation Drawer ListView 选择问题

android - Achartengine 条形图 x 标签在列下未正确对齐

android - "Profile or Debug APK..."选项在 Android Studio 3.4.1 中消失到哪里去了?

android - 应用程序在使用服务 android 时关闭时崩溃,因为我正在尝试使用 Intent