Android——高德地图地点搜索框
效果图
首先
实现效果如图。由于搜索采用的是 高德地图搜索 SDK 所以需要到 高德地图开发者注册账号 获取到 appKey
注册成功进入个人中心 创建对应的应用
build.gradle
创建项目,导入 gradle
// 高德地图
compile 'com.amap.api:search:latest.integration'
配置好 AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="zqx.rj.com.gdplacesearch"><!--网络权限--><uses-permission android:name="android.permission.INTERNET" /><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activity android:name=".InputTipsActivity"/><!-- 高德地图 key --><meta-dataandroid:name="com.amap.api.v2.apikey"android:value="你自己的 appkey" /></application></manifest>
先写 MainActivity.xml 布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Buttonandroid:id="@+id/btn_search"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="搜索框"/><TextViewandroid:id="@+id/tv_place"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="地点:"android:layout_margin="10dp"/></LinearLayout>
MainActivity
package zqx.rj.com.gdplacesearch;import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;import com.amap.api.services.help.Tip;/*** author: HyZhan* created:2018/9/20 15:06* desc: TODO*/public class MainActivity extends AppCompatActivity {private TextView mTvPlace;private static final int REQUEST_PLACE = 1;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button mBtnSearch = findViewById(R.id.btn_search);mBtnSearch.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MainActivity.this, InputTipsActivity.class);startActivityForResult(intent, REQUEST_PLACE);}});mTvPlace = findViewById(R.id.tv_place);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {if (requestCode == REQUEST_PLACE) {if (resultCode == InputTipsActivity.RESULT_CODE_INPUTTIPS && data != null) {final Tip tip = data.getParcelableExtra("tip");if (tip.getName() != null) {mTvPlace.setText("选择地点是:" + tip.getName());}}}}
}
初始化相应控件,当点击了 搜索框 按钮跳转到 InputTipsActivity。
onActivityResult 处理当用户点击地点的时候回调(也就是点击 ListView item 回调)
并显示选择地点 显示到 TextView 上,我这里只显示 选择地点,想要获取更多显示信息可以 在 Tip 中获取
然后
然后写 ListView 适配器 InputTipsAdapter 和对应 adapter_inputtips.xml 文件
<?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"android:orientation="vertical"android:paddingBottom="10dp"android:paddingLeft="10dp"android:paddingTop="10dp"android:background="@android:color/white"><TextViewandroid:id="@+id/name"android:layout_width="match_parent"android:layout_height="wrap_content"android:textColor="#000"android:textSize="15sp"android:textStyle="bold"/><TextViewandroid:id="@+id/address"android:layout_width="match_parent"android:layout_height="wrap_content"android:textColor="#000"android:textSize="12sp"/></LinearLayout>
简单的两个 TextView 控件 第一个控件显示地点,第二个显示详细地址
package zqx.rj.com.gdplacesearch;import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;import com.amap.api.services.help.Tip;import java.util.List;/*** 输入提示adapter,展示item名称和地址*/
public class InputTipsAdapter extends BaseAdapter {private Context mContext;private List<Tip> mListTips;InputTipsAdapter(Context context, List<Tip> tipList) {mContext = context;mListTips = tipList;}@Overridepublic int getCount() {if (mListTips != null) {return mListTips.size();}return 0;}@Overridepublic Object getItem(int i) {if (mListTips != null) {return mListTips.get(i);}return null;}@Overridepublic long getItemId(int i) {return i;}@Overridepublic View getView(int i, View view, ViewGroup viewGroup) {Holder holder;if (view == null) {holder = new Holder();view = LayoutInflater.from(mContext).inflate(R.layout.adapter_inputtips, null);holder.mName = view.findViewById(R.id.name);holder.mAddress = view.findViewById(R.id.address);view.setTag(holder);} else{holder = (Holder)view.getTag();}if(mListTips == null){return view;}holder.mName.setText(mListTips.get(i).getName());String address = mListTips.get(i).getAddress();if(address == null || address.equals("")){holder.mAddress.setVisibility(View.GONE);}else{holder.mAddress.setVisibility(View.VISIBLE);holder.mAddress.setText(address);}return view;}class Holder {TextView mName;TextView mAddress;}
}
Tip 这个 bean 存储的是 地点相关信息
这里也是简单初始化控件、复用 ViewHolder 应该大家都看得懂吧~
接下来是 activity_input_tips.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@android:color/white"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="48dp"android:background="@android:color/white"android:orientation="horizontal"><android.support.v7.widget.SearchViewandroid:id="@+id/keyWord"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:imeOptions="actionSearch"android:inputType="textCapWords"android:singleLine="true"android:textColor="@android:color/white"android:textColorHint="@android:color/white"app:queryHint="请输入上车地点"app:searchIcon="@null" /></LinearLayout><ListViewandroid:id="@+id/inputtip_list"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginTop="5dp"></ListView></LinearLayout>
这里引用了 SearchView 控件(搜索框),ListView 显示相对于搜索结果。
InputTipsActivity
package zqx.rj.com.gdplacesearch;import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.SearchView;
import android.text.TextUtils;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.Toast;import com.amap.api.services.help.Inputtips;
import com.amap.api.services.help.InputtipsQuery;
import com.amap.api.services.help.Tip;import java.util.List;public class InputTipsActivity extends AppCompatActivity implements SearchView.OnQueryTextListener,Inputtips.InputtipsListener, OnItemClickListener {private ListView mInputListView;private List<Tip> mCurrentTipList;private InputTipsAdapter mIntipAdapter;public static String DEFAULT_CITY = "北京";public static final int RESULT_CODE_INPUTTIPS = 101;public static final int REQUEST_SUC = 1000;@Overrideprotected void onCreate(Bundle savedInstanceState) {setContentView(R.layout.activity_input_tips);super.onCreate(savedInstanceState);initSearchView();mInputListView = findViewById(R.id.inputtip_list);mInputListView.setOnItemClickListener(this);}private void initSearchView() {SearchView searchView = findViewById(R.id.keyWord);searchView.setOnQueryTextListener(this);//设置SearchView默认为展开显示searchView.setIconified(false);searchView.onActionViewExpanded();searchView.setIconifiedByDefault(true);searchView.setSubmitButtonEnabled(false);}/*** 输入提示回调*/@Overridepublic void onGetInputtips(List<Tip> tipList, int rCode) {// 正确返回if (rCode == REQUEST_SUC) {mCurrentTipList = tipList;mIntipAdapter = new InputTipsAdapter(getApplicationContext(), mCurrentTipList);mInputListView.setAdapter(mIntipAdapter);mIntipAdapter.notifyDataSetChanged();} else {Toast.makeText(this, "错误码 :" + rCode, Toast.LENGTH_SHORT).show();}}@Overridepublic void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {if (mCurrentTipList != null) {Tip tip = (Tip) adapterView.getItemAtPosition(i);Intent intent = new Intent();intent.putExtra("tip", tip);setResult(RESULT_CODE_INPUTTIPS, intent);this.finish();}}/*** 按下确认键触发,本例为键盘回车或搜索键*/@Overridepublic boolean onQueryTextSubmit(String query) {return false;}/*** 输入字符变化时触发*/@Overridepublic boolean onQueryTextChange(String newText) {if (!TextUtils.isEmpty(newText)) {InputtipsQuery inputquery = new InputtipsQuery(newText, DEFAULT_CITY);Inputtips inputTips = new Inputtips(InputTipsActivity.this, inputquery);inputTips.setInputtipsListener(this);inputTips.requestInputtipsAsyn();} else {// 如果输入为空 则清除 listView 数据if (mIntipAdapter != null && mCurrentTipList != null) {mCurrentTipList.clear();mIntipAdapter.notifyDataSetChanged();}}return true;}}
onQueryTextChange() 当输入相关字符触发,如果输入不为空的话,创建搜索对象 并 设置监听,异步请求搜索地点。
onGetInputtips() 方法是搜索结果 回调,根据返回状态码判断 1000 表示 搜索成功,其他错误,参考官网错误码对照表
onItemClick() 获取当前点击 position 回调 MainActivity
最后
源码传送门
感谢阅读,下次再见。
Android——高德地图地点搜索框相关推荐
- Android实现高德地图POI搜索
效果图如下: 导入高德地图的搜索服务包到工程的libs目录中,并配置好权限与用户KEY. 权限如下: <uses-permission android:name="android.pe ...
- Android 高德地图给指定坐标显示图片,以及聚合显示
官网实例请点击:Android 高德地图聚合官网 下面是一个案例: 效果图: MainActivity public class MainActivity extends AppCompatActiv ...
- Android 高德地图自定义线路规划选择方案之后按照方案进行导航
Android 高德地图自定义线路规划选择方案之后按照方案进行导航 因为我这边导航需求的问题,导致我这边不能使用高德地图官方的线路规划和导航.所以我这边线路规划和导航界面都是根据高德地图那边给的api ...
- Android 高德地图中路线规划绘制界面线路
Android 高德地图中路线规划绘制界面线路 下面代码是根据很多的经纬度的点,绘制出直线的线路.比较死板 /*** 绘制景区的路线*/private void setRouteInfo(List&l ...
- 关于ArcGis for javascript整合百度地图 天地图 高德地图进行搜索
1.ArcGis for javascript整合百度地图搜索 1.1.首先引入百度地图的api 1 <!-- 引入百度地图API --> 2 <script type=" ...
- Android 高德地图地铁信息查询
Android 高德地图地铁信息查询 欢迎查看本篇文章 前言 使用 结尾 欢迎查看本篇文章 首先感谢高德技术人员协助帮助我解决疑问,本文需要您花费10分钟左右. 前言 由于想在地图上描绘地铁线突出显示 ...
- android 高德地图定位获取经纬度
android 高德地图定位获取经纬度 之前开发定位都是集成百度的,领导说要用高德的,没办法干吧,官方的文档太详细了看着真累. 我们得先去官网注册开发者账号,创建应用,填写自己项目的包名和SHA1, ...
- Android高德地图自定义Markers的例子
下文为各位重点介绍关于Android高德地图自定义Markers的例子,希望这篇文章能够让各位理解到Android高德地图自定义Markers的方法. 之前的博客里说了地图的嵌入和定位,今天就说说在地 ...
- android 仿搜索动画,Android仿京东顶部搜索框滑动伸缩动画效果
最近使用京东发现,京东顶部的搜索框有一个新的伸缩效果,根据用户的手势滑动,伸缩搜索框.觉得效果还不错,就看了下其他的应用有没有这种伸缩的效果,发现安居客也使用了类似的一种效果,然后就想着实现这样的一种 ...
最新文章
- HttpClient 连接池设置引发的一次雪崩!
- zabbix3.0.4通过jmx监控tomcat
- 迁移TFS 2012服务至新的电脑硬件
- 我想做产品,实现一个非常优秀的电脑桌面记事本加闹钟
- Windows下的函数
- BI报表系统在银行业的应用
- JavaSE总结(适合Java期末考试复习,JavaSE部分知识回顾)
- Sipeed M1W内部esp8285固件烧录教程
- 迎亚运 广州推出全国首个地铁导向地图
- python实现手机连续点击
- 原神换服报错(二级地址解析失败),换服失败,无反应
- Android隐藏输入法 【有效】
- powershell下使用linux命令,Win10系统下使用Windows PowerShell运行ABD命令的方法
- 马哥教育SRE笔记【作业】week05
- Revit二次开发案例一(第1讲)
- 刚性仿射变换算法_图像的仿射变换
- 红米note7找android,红米 NOTE7 PRO简易测评与去广告
- 小心!除了植入木马,你的充电宝可能还在窃听你,受害人遍布全国
- MATLAB产生数字调制基带信号(python对比)
- 2017CCF大数据学术会议大数据智能分析分论坛成功举办
热门文章
- 关于使用datagrip连接postgresql不显示数据库问题解决
- 【Matlab】系统的响应分析
- 生日悖论MATLAB仿真
- python 模拟键盘自动打字敲英语文章
- springBoot配置多个过滤器filter的执行顺序
- 京东抢购工具 监控工具 秒杀工具
- Windows10下安装point-cloud-annotation-tool点云标注工具——吐血之路总结
- php有哪几种运行环境,php有哪些运行环境
- 上传项目到github报错:Permission to xxx/xxx.git denied to xxxxxxx.
- MIT6.824环境搭建:wls+vs code