《Android 平板电脑开发实战详解和典型案例》——2.1节搜索框控件—— SearchView

简介:

本节书摘来自异步社区《Android 平板电脑开发实战详解和典型案例》一书中的第2章,第2.1节搜索框控件—— SearchView,作者 吴亚峰 , 杜化美 , 索依娜,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.1 搜索框控件—— SearchView
Android 平板电脑开发实战详解和典型案例
本节将介绍Android 3.0新增控件——搜索框控件SearchView,主要内容包括搜索框控件SearchView的基本知识以及一个简单的案例。

提示

本书中的案例都是在540×960分辨率的真机上调试通过的,若执行本书中案例的设备分辨率不是540×960,可能会有显示不正常的情况。但大部分案例都是没有问题的,尤其是最后第14、第15、第16章的大案例都是自适应于各种屏幕分辨率的。

2.1.1 搜索框控件基本知识
搜索框控件SearchView可增加一个ListView实现自动补全功能,通过Adapter给此控件加入自动补全列表,可根据输入的字段进行搜索。搜索框控件SearchView继承自LinearLayout,其继承树如图2-1所示。

说明

对于搜索框控件SearchView中的一些方法,由于篇幅所限,这里将不再一一赘述,请读者自行查阅相关的API。


a047ab34fc88dde85bcd98e4760532b756e5eb50

2.1.2 搜索框控件使用案例
通过前面的介绍,读者对搜索框控件SearchView已经有了一个基本的了解,下面将通过一个简单的案例Sample2_1使读者进一步掌握搜索框控件SearchView的使用。在正式介绍此案例的开发步骤之前,请读者了解一下此案例的运行效果,如图2-2、图2-3和图2-4所示。


6e6c33287a24633c8e76fbac8c4b433f8fad041d

图2-2为运行效果图,图2-3和图2-4分别为程序运行的初始界面输入“j”和“a”字母后的运行效果图。
了解了案例的运行效果之后,下面开始介绍案例的开发,具体步骤如下。

(1)首先需要编写的是界面布局文件searchview_layout.xml,其代码如下。


1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3     android:layout_width="match_parent"           <!--匹配父控件-->
4     android:layout_height="match_parent"           <!--匹配父控件--> 
5     android:orientation="vertical">              <!--垂直排序-->
6   <SearchView
7       android:id="@+id/search_view"             <!--设置id-->  
8       android:layout_width="wrap_content"          <!--自身决定宽度-->
9       android:layout_height="wrap_content"/>        <!--自身决定高度-->
10   <ListView
11       android:id="@+id/list_view"              <!--设置id-->
12       android:layout_width="match_parent"          <!--匹配父控件--> 
13       android:layout_height="match_parent"         <!--匹配父控件-->
14       android:layout_weight="1"/>          
15 </LinearLayout>

界面的布局比较简单,在主的LinearLayout中加入一个SearchView和一个ListView,并设置好相关的属性。
(2)完成了布局文件searchview_layout.xml文件的开发后,下面将要开发的是本案例中主Activity对应的类SearchViewActivity,其代码如下。


1 package com.bn.sample2_1;                        //声明包
2  ……//该处省略了部分类的导入代码,读者可自行查看随书光盘中的源代码
3 public class SearchViewActivity extends Activity implements SearchView.OnQueryTextListener 
4 { private SearchView mSearchView; 
5 private ListView mListView;
6 private final String[] mStrings = {"Java程序员职场全攻略",    //所要搜索的所有数据
7 "Java SE 6.0编程指南","30天学通Java Web项目案例开发","30天学通Java项目案例开发",
8  "Android核心技术与实例详解","Android 2.0游戏开发实战宝典"};
9 @Override
10 protected void onCreate(Bundle savedInstanceState) {
11 super.onCreate(savedInstanceState);
12 getWindow().requestFeature(Window.FEATURE_ACTION_BAR);    //设置窗口特性
13  setTheme(R.style.mytheme1)                   //设置主题
14 setContentView(R.layout.searchview_layout);           //设置当前界面
15 mListView = (ListView) findViewById(R.id.list_view);     //拿到列表视图对象
16 mListView.setAdapter(new ArrayAdapter<String>(
17 this,android.R.layout.simple_list_item_1,mStrings));     //添加适配器
18 mListView.setTextFilterEnabled(true);               //设置文本过滤器为可用
19 mSearchView = (SearchView) findViewById(R.id.search_view);  //拿到搜索框控件对象
20 mSearchView.setIconifiedByDefault(false);             //搜索栏是否默认被图标化
21 mSearchView.setOnQueryTextListener(this);             //添加监听器
22 mSearchView.setSubmitButtonEnabled(true);           //用于显示一个执行搜索功能的按钮 
23 mSearchView.setQueryHint(getString(R.string.search));}     //控件默认显示的文本
24 public boolean onQueryTextChange(String newText) {       //监听输入事件,内容有变化时调用
25 if (TextUtils.isEmpty(newText)) {                   //如果字符串为空
26  mListView.clearTextFilter();                     //去掉文本过滤器
27   } else {mListView.setFilterText(newText.toString());     //过滤所有内容
28    } return true;}
29 public boolean onQueryTextSubmit(String query) {          //监听回车或搜索按钮事件
30  Toast.makeText(this, getString(R.string.search_click)+ "  " + query, 0).show ();                                            //提示信息
31  return false; }}

第6~8行创建了要搜索的所有数据。第13~15行设置了主题和界面布局并拿到了ListView对象。
第16~18行为给ListView添加适配器并设置相关属性,第19~23行表示拿到SearchView对象,给其添加适配器并设置相关属性。
第24~28行重写了SearchView的监听器的onQueryTextChange方法,每当内容有变化时此方法被调用。
第29~31行重写了SearchView的监听器的onQueryTextSubmit方法来监听输入事件,当内容有变化时此方法被调用。

相关文章
|
6月前
|
XML 搜索推荐 Android开发
Android改变进度条控件progressbar的样式(根据源码修改)
本文介绍了如何基于Android源码自定义ProgressBar样式。首先分析了系统源码中ProgressBar样式的定义,发现其依赖一张旋转图片实现动画效果。接着分两步指导开发者实现自定义:1) 模仿源码创建一个旋转动画XML文件(放置在drawable文件夹),修改图片为自定义样式;2) 在UI控件中通过`indeterminateDrawable`属性应用该动画。最终实现简单且个性化的ProgressBar效果,附带效果图展示。
424 2
|
6月前
|
Android开发
Android控件样式的抽取(小提及快捷方式)
在Android开发中,若多个控件样式重复,可抽取公共部分以简化代码。例如对EditText提取样式,通过编辑`styles.xml`实现复用。为提高效率,Android Studio提供自动提取Style功能:右键点击控件样式选项,选择“Style...”,勾选需要提取的属性后确认,即可快速生成样式代码,显著提升开发便利性。
202 2
|
XML 编解码 Android开发
安卓开发中的自定义视图控件
【9月更文挑战第14天】在安卓开发中,自定义视图控件是一种高级技巧,它可以让开发者根据项目需求创建出独特的用户界面元素。本文将通过一个简单示例,引导你了解如何在安卓项目中实现自定义视图控件,包括创建自定义控件类、处理绘制逻辑以及响应用户交互。无论你是初学者还是有经验的开发者,这篇文章都会为你提供有价值的见解和技巧。
175 3
|
XML 存储 Java
浅谈Android的TextView控件
浅谈Android的TextView控件
125 0
|
Java Android开发 Spring
Android Spingboot 实现SSE通信案例
【7月更文挑战第14天】以下是使用Android和Spring Boot实现SSE(Server-Sent Events)通信的案例摘要: 在`MainActivity`中: - 初始化界面元素并设置按钮点击事件。 - `startSseRequest`方法创建`WebClient`对象,设置请求头,发送请求,并处理响应和错误。 请确保将`your-server-url`替换为实际的服务器地址。
552 14
|
Java Android开发 C++
🚀Android NDK开发实战!Java与C++混合编程,打造极致性能体验!📊
【7月更文挑战第28天】在 Android 开发中, NDK 让 Java 与 C++ 混合编程成为可能, 从而提升应用性能。**为何选 NDK?** C++ 在执行效率与内存管理上优于 Java, 特别适合高性能需求场景。**环境搭建** 需 Android Studio 和 NDK, 工具如 CMake。**JNI** 构建 Java-C++ 交互, 通过声明 `native` 方法并在 C++ 中实现。**实战** 示例: 使用 C++ 计算斐波那契数列以提高效率。**总结** 混合编程增强性能, 但增加复杂性, 使用前需谨慎评估。
421 4
|
前端开发 Android开发 开发者
安卓开发中的自定义视图:构建你的第一个控件
【8月更文挑战第26天】在安卓开发的浩瀚海洋中,自定义视图是一块充满魔力的乐土。它不仅是开发者展示创造力的舞台,更是实现独特用户体验的关键。本文将带你步入自定义视图的世界,从基础概念到实战应用,一步步教你如何打造自己的第一个控件。无论你是初学者还是有经验的开发者,这篇文章都将为你的开发之旅增添新的风景。
|
JSON Java API
【Android】使用 Retrofit2 发送异步网络请求的简单案例
**摘要:** Retrofit是Android和Java的HTTP客户端库,简化了RESTful API交互。它通过Java接口定义HTTP请求,并提供注解管理参数、HTTP方法等。要使用Retrofit,首先在AndroidManifest.xml中添加`INTERNET`权限,然后在`build.gradle`中引入Retrofit和Gson依赖。创建服务器响应数据类和描述接口的接口,如`Result`和`Api`。通过Retrofit.Builder配置基础URL并构建实例,之后调用接口方法创建Call对象并发送异步请求。
527 1
|
前端开发 API Android开发
25. 【Android教程】列表控件 ListView
25. 【Android教程】列表控件 ListView
723 3
|
XML 数据格式
Android-自定义三角形评分控件
Android-自定义三角形评分控件
188 0

热门文章

最新文章