当前位置: 移动技术网 > IT编程>移动开发>Android > Android 高德地图之poi搜索功能的实现代码

Android 高德地图之poi搜索功能的实现代码

2019年07月24日  | 移动技术网IT编程  | 我要评论

江山如此多枭地图,四爷的惑情宝贝,a.xfmimi.info

废话不多说,先看效果,如果大家感觉不错,请参考实现代码

这里写图片描述

这个功能我是用fragmentdialog里面做的,也遇到不少坑

第一,就是设置背景的drawable为纯白色导致键盘弹出的时候,recyclerview的布局被顶上去导致出现白色布局,有点扎眼;最后改成了设置为和背景色一个颜色就和好了

  window window = getdialog().getwindow();
    windowmanager.layoutparams lp = window.getattributes();
    lp.gravity = gravity.center;
    window.setbackgrounddrawable(new colordrawable(contextcompat.getcolor(getactivity(), r.color.color_gray_f2)));
    window.setattributes(lp);

布局

<?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  xmlns:tools="http://schemas.android.com/tools"
  android:background="@color/color_gray_f2"
  android:orientation="vertical">
  <relativelayout
    android:id="@+id/search_maps_bar"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:layout_centerhorizontal="true"
    android:layout_marginleft="15dp"
    android:layout_marginright="15dp"
    android:layout_margintop="10dp"
    android:background="@drawable/new_card">
    <imagebutton
      android:id="@+id/dialog_search_back"
      android:layout_width="50dp"
      android:layout_height="match_parent"
      android:layout_centervertical="true"
      android:layout_margin="2dp"
      android:background="@drawable/button_background_selector"
      android:src="@drawable/ic_qu_appbar_back"/>
    <imagebutton
      android:id="@+id/dialog_serach_btn_search"
      android:layout_width="50dp"
      android:layout_height="match_parent"
      android:layout_alignparentright="true"
      android:layout_centervertical="true"
      android:layout_margin="2dp"
      android:background="@drawable/button_background_selector"
      android:src="@drawable/ic_qu_search"
      tools:ignore="contentdescription,rtlhardcoded"/>
    <edittext
      android:id="@+id/dialog_search_et"
      android:layout_width="wrap_content"
      android:layout_height="match_parent"
      android:layout_centerinparent="true"
      android:layout_marginleft="5.0dip"
      android:layout_marginright="5.0dip"
      android:layout_toleftof="@+id/dialog_serach_btn_search"
      android:layout_torightof="@+id/dialog_search_back"
      android:background="@android:color/transparent"
      android:completionthreshold="1"
      android:dropdownverticaloffset="1.0dip"
      android:hint="请输入关键字"
      android:imeoptions="actionsearch|flagnoextractui"
      android:inputtype="text|textautocomplete"
      android:maxheight="50dp"
      android:maxlength="20"
      android:minheight="50dp"
      android:singleline="true"
      android:textcolor="#000000"
      android:textsize="16.0sp"/>
  </relativelayout>
  <android.support.v7.widget.recyclerview
    android:id="@+id/dialog_search_recyclerview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginleft="15dp"
    android:layout_marginright="15dp"
    android:layout_margintop="@dimen/dp_10" />
</linearlayout>

第二个问题是键盘弹出的时候,会出现dialog布局整体被顶上去

最后通过设置 style来解决

  @override
  public void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    //解决dialogfragment布局不被顶上去的方法
    setstyle(dialogfragment.style_normal, android.r.style.theme_black_notitlebar);
  }

最后就是实现搜索功能了

第一个点击搜索时,键盘和搜索按钮两个都是同样的效果

/**
   * 搜索功能
   */
  private void searchlocationpoi() {
    //关闭键盘
    keyboardutils.closekeybord(poisearchinmaps, baseapplication.mcontext);
    if (textutils.isempty(poisearchinmaps.gettext().tostring().trim())) {
      toastutils.showtoastcenter("内容为空!");
    } else {
      query = new poisearch.query(poisearchinmaps.gettext().tostring().trim(), "", "");// 第一个参数表示搜索字符串,第二个参数表示poi搜索类型,第三个参数表示poi搜索区域(空字符串代表全国)
      query.setpagesize(20);// 设置每页最多返回多少条poiitem
      query.setpagenum(0);// 设置查第一页
      poisearch = new poisearch(getactivity(), query);
      poisearch.setonpoisearchlistener(this);
      poisearch.searchpoiasyn();
    }
  }

然后回调中进行处理

@override
  public void onpoisearched(poiresult poiresult, int errcode) {
    logger.e(poiresult.getpois().tostring() + "" + errcode);
    if (errcode == 1000) {
      datas = new arraylist<>();
      arraylist<poiitem> pois = poiresult.getpois();
      for (int i = 0; i < pois.size(); i++) {
        locationbean locationbean = new locationbean();
        locationbean.title = pois.get(i).gettitle();
        locationbean.snippet = pois.get(i).getsnippet();
        datas.add(locationbean);
      }
      searchcaradapter.setnewdata(datas);
    }
  }

    还有就是监听edittext里面内容的变化来搜索,其实也很简单

 poisearchinmaps.addtextchangedlistener(new textwatcher() {
      @override
      public void beforetextchanged(charsequence charsequence, int i, int i1, int i2) {
      }
      @override
      public void ontextchanged(charsequence charsequence, int i, int i1, int i2) {
        textchangesearch(charsequence);
      }
      @override
      public void aftertextchanged(editable editable) {
      }
    });
  /**
   * 监听edittext内容的变化,去搜索
   */
  private void textchangesearch(charsequence charsequence) {
    string content = charsequence.tostring().trim();//获取自动提示输入框的内容
    logger.e(content);
    inputtipsquery inputtipsquery = new inputtipsquery(content, "");//初始化一个输入提示搜索对象,并传入参数
    inputtips inputtips = new inputtips(getactivity(), inputtipsquery);//定义一个输入提示对象,传入当前上下文和搜索对象
    inputtips.setinputtipslistener(new inputtips.inputtipslistener() {
      @override
      public void ongetinputtips(list<tip> list, int errcode) {
        logger.e(list.tostring() + errcode);
        if (errcode == 1000 && list != null) {
          datas = new arraylist<>();
          for (int i = 0; i < list.size(); i++) {
            locationbean locationbean = new locationbean();
            tip tip = list.get(i);
            locationbean.latitude = tip.getpoint().getlatitude();
            locationbean.longitude = tip.getpoint().getlongitude();
            locationbean.snippet = tip.getname();
            locationbean.title = tip.getdistrict();
            datas.add(locationbean);
          }
          searchcaradapter.setnewdata(datas);
        }
      }
    });//设置输入提示查询的监听,实现输入提示的监听方法ongetinputtips()
    inputtips.requestinputtipsasyn();//输入查询提示的异步接口实现
  }

ok,搞定,最后只需要搞个回调,把search后点击的item传回去就好了.希望对大家有所帮助

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网