效果图

首先

实现效果如图。由于搜索采用的是 高德地图搜索 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——高德地图地点搜索框相关推荐

  1. Android实现高德地图POI搜索

    效果图如下: 导入高德地图的搜索服务包到工程的libs目录中,并配置好权限与用户KEY. 权限如下: <uses-permission android:name="android.pe ...

  2. Android 高德地图给指定坐标显示图片,以及聚合显示

    官网实例请点击:Android 高德地图聚合官网 下面是一个案例: 效果图: MainActivity public class MainActivity extends AppCompatActiv ...

  3. Android 高德地图自定义线路规划选择方案之后按照方案进行导航

    Android 高德地图自定义线路规划选择方案之后按照方案进行导航 因为我这边导航需求的问题,导致我这边不能使用高德地图官方的线路规划和导航.所以我这边线路规划和导航界面都是根据高德地图那边给的api ...

  4. Android 高德地图中路线规划绘制界面线路

    Android 高德地图中路线规划绘制界面线路 下面代码是根据很多的经纬度的点,绘制出直线的线路.比较死板 /*** 绘制景区的路线*/private void setRouteInfo(List&l ...

  5. 关于ArcGis for javascript整合百度地图 天地图 高德地图进行搜索

    1.ArcGis for javascript整合百度地图搜索 1.1.首先引入百度地图的api 1 <!-- 引入百度地图API --> 2 <script type=" ...

  6. Android 高德地图地铁信息查询

    Android 高德地图地铁信息查询 欢迎查看本篇文章 前言 使用 结尾 欢迎查看本篇文章 首先感谢高德技术人员协助帮助我解决疑问,本文需要您花费10分钟左右. 前言 由于想在地图上描绘地铁线突出显示 ...

  7. android 高德地图定位获取经纬度

    android 高德地图定位获取经纬度 之前开发定位都是集成百度的,领导说要用高德的,没办法干吧,官方的文档太详细了看着真累. 我们得先去官网注册开发者账号,创建应用,填写自己项目的包名和SHA1, ...

  8. Android高德地图自定义Markers的例子

    下文为各位重点介绍关于Android高德地图自定义Markers的例子,希望这篇文章能够让各位理解到Android高德地图自定义Markers的方法. 之前的博客里说了地图的嵌入和定位,今天就说说在地 ...

  9. android 仿搜索动画,Android仿京东顶部搜索框滑动伸缩动画效果

    最近使用京东发现,京东顶部的搜索框有一个新的伸缩效果,根据用户的手势滑动,伸缩搜索框.觉得效果还不错,就看了下其他的应用有没有这种伸缩的效果,发现安居客也使用了类似的一种效果,然后就想着实现这样的一种 ...

最新文章

  1. HttpClient 连接池设置引发的一次雪崩!
  2. zabbix3.0.4通过jmx监控tomcat
  3. 迁移TFS 2012服务至新的电脑硬件
  4. 我想做产品,实现一个非常优秀的电脑桌面记事本加闹钟
  5. Windows下的函数
  6. BI报表系统在银行业的应用
  7. JavaSE总结(适合Java期末考试复习,JavaSE部分知识回顾)
  8. Sipeed M1W内部esp8285固件烧录教程
  9. 迎亚运 广州推出全国首个地铁导向地图
  10. python实现手机连续点击
  11. 原神换服报错(二级地址解析失败),换服失败,无反应
  12. Android隐藏输入法 【有效】
  13. powershell下使用linux命令,Win10系统下使用Windows PowerShell运行ABD命令的方法
  14. 马哥教育SRE笔记【作业】week05
  15. Revit二次开发案例一(第1讲)
  16. 刚性仿射变换算法_图像的仿射变换
  17. 红米note7找android,红米 NOTE7 PRO简易测评与去广告
  18. 小心!除了植入木马,你的充电宝可能还在窃听你,受害人遍布全国
  19. MATLAB产生数字调制基带信号(python对比)
  20. 2017CCF大数据学术会议大数据智能分析分论坛成功举办

热门文章

  1. 关于使用datagrip连接postgresql不显示数据库问题解决
  2. 【Matlab】系统的响应分析
  3. 生日悖论MATLAB仿真
  4. python 模拟键盘自动打字敲英语文章
  5. springBoot配置多个过滤器filter的执行顺序
  6. 京东抢购工具 监控工具 秒杀工具
  7. Windows10下安装point-cloud-annotation-tool点云标注工具——吐血之路总结
  8. php有哪几种运行环境,php有哪些运行环境
  9. 上传项目到github报错:Permission to xxx/xxx.git denied to xxxxxxx.
  10. MIT6.824环境搭建:wls+vs code