Android 高德地图之poi搜索功能的实现代码
程序员文章站
2024-02-11 21:49:46
废话不多说,先看效果,如果大家感觉不错,请参考实现代码
这个功能我是用fragmentdialog里面做的,也遇到不少坑
第一,就是设置背景的drawable为...
废话不多说,先看效果,如果大家感觉不错,请参考实现代码
这个功能我是用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传回去就好了.希望对大家有所帮助