android 仿微信demo————微信顶部操作栏搜索按钮实现(查询通讯录好友功能)

Posted 你要永远相信光z

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android 仿微信demo————微信顶部操作栏搜索按钮实现(查询通讯录好友功能)相关的知识,希望对你有一定的参考价值。

android 仿微信demo————微信启动界面实现

android 仿微信demo————注册功能实现(移动端)

android 仿微信demo————注册功能实现(服务端)

android 仿微信demo————登录功能实现(移动端)

android 仿微信demo————登录功能实现(服务端)

android 仿微信demo————微信主界面实现

android 仿微信demo————微信消息界面实现(移动端)

android 仿微信demo————微信消息界面实现(服务端)

android 仿微信demo————微信通讯录界面功能实现(移动端,服务端)

android 仿微信demo————微信发现界面实现

android 仿微信demo————微信顶部操作栏界面实现

android 仿微信demo————微信顶部操作栏搜索按钮实现(查询通讯录好友功能)

android 仿微信demo————微信顶部操作栏加号按钮实现(弹出子菜单)

上一篇中实现微信顶部操作栏界面,并没有实现按钮点击事件跳转的activity,这一篇主要实现搜索按钮功能(查询通讯录好友)

微信顶部操作栏搜索按钮实现(查询通讯录好友功能)

下面我们来实现第一个按钮功能(搜索通讯录好友)

观察微信,当点击搜索按钮时页面会发送变化,页面的顶部是一个搜索框,右边还包括一个取消按钮,点击可返回到之前的页面,下面就是一些可以搜索的指定内容(不实现),在搜索框中可以搜索联系人,可通过字母搜索(这里只实现首字母检索),和名称检索。

上面这些功能,总的来说就是点击按钮跳转到另一个activity,然后在activity实现这些布局,搜索功能在activity中进行处理

下面给出点击搜索按钮跳转的activity的布局
search.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"
    android:background="@color/white">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:background="#E5E5E5">
        
        <android.support.v7.widget.SearchView
            android:id="@+id/searview"
            android:layout_width="300dp"
            android:layout_height="30dp"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="30dp"
            android:background="@color/white"
            app:iconifiedByDefault="false"
            app:queryHint="搜索" />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:background="@null"
            android:text="取消"
            android:textColor="@color/massageLogin"
            android:onClick="back"/>
        
    </LinearLayout>

    <LinearLayout
        android:id="@+id/label"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:background="#E5E5E5">
        
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:layout_gravity="center_horizontal"
        android:text="搜索指定内容"
        android:textColor="#BEBEBE"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:divider="@drawable/login_dvier"
        android:gravity="center_horizontal"
        android:layout_marginTop="30dp"
        android:showDividers="middle">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingHorizontal="30dp"
            android:text="朋友圈"
            android:textColor="@color/massageLogin"
            android:textSize="14dp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingHorizontal="30dp"
            android:text="文章"
            android:textColor="@color/massageLogin"
            android:textSize="14dp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingHorizontal="30dp"
            android:text="公众号"
            android:textColor="@color/massageLogin"
            android:textSize="14dp" />
        
    </LinearLayout>
        
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:divider="@drawable/login_dvier"
        android:gravity="center_horizontal"
        android:layout_marginTop="30dp"
        android:layout_marginLeft="-6dp"
        android:showDividers="middle">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingHorizontal="30dp"
            android:text="小程序"
            android:textColor="@color/massageLogin"
            android:textSize="14dp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingHorizontal="30dp"
            android:text="音乐"
            android:textColor="@color/massageLogin"
            android:textSize="14dp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingHorizontal="30dp"
            android:text=" 表情"
            android:textColor="@color/massageLogin"
            android:textSize="14dp" />
        
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:divider="@drawable/login_dvier"
        android:layout_marginLeft="40dp"
        android:layout_marginTop="30dp"
        android:showDividers="middle">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingHorizontal="30dp"
            android:text="服务"
            android:textColor="@color/massageLogin"
            android:textSize="14dp" />
        
    </LinearLayout>
        
    </LinearLayout>

    <LinearLayout
        android:id="@+id/top"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:text="联系人"
            android:textColor="#A8A8A8"/>
        <View
            android:layout_width="match_parent"
            android:layout_height="0.5dp"
            android:layout_marginLeft="10dp"
            android:background="#90909090" />
        
    </LinearLayout>

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:divider="@drawable/main_list_divider_line"
        android:dividerHeight="1.5px"
        android:layout_marginBottom="50dp">
    </ListView>
    
</LinearLayout>

上面布局包括我们前面说过的搜索框(searchview),右边的取消按钮(button),以及下面的搜索指定内容,对应事件的处理代码在activity中进行处理,还有当在搜索框输入内容显示的联系人和listview(默认情况下不显示),下面给出对应的actiivty

创建上面布局对应的activity
Search.java

package com.zhang.test.wxchatdemo1;

import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.SearchView;
import android.text.TextUtils;
import android.view.View;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;

import com.zhang.test.wxchatdemo1.adapter.SearchSortAdapter;
import com.zhang.test.wxchatdemo1.tools.User;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class Search extends AppCompatActivity {
    //声明组件
    private SearchView mSearchView;
    private ListView mListView;
    private LinearLayout label;
    private LinearLayout top;
    //创建集合用户处理搜索功能
    private  List<User> list = MainWeixin.list;
    private List<User> list1 = null;
    public static List<Map<String, String>> data = MainWeixin.data;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.search);
        /* 隐藏自带标题*/
        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
            actionBar.hide();
        }
        if (Build.VERSION.SDK_INT >= 21) {
            View decorView = getWindow().getDecorView();
            int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN //全屏显示
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; //因为背景为浅色所以将状态栏字体设置为黑色
            decorView.setSystemUiVisibility(option);
            getWindow().setStatusBarColor(Color.TRANSPARENT);
        }
        //初始化组件
        mListView = (ListView) findViewById(R.id.listView);
        label = (LinearLayout) findViewById(R.id.label);
        top = (LinearLayout) findViewById(R.id.top);
        mSearchView = (SearchView) findViewById(R.id.searview);
        //设置searchview适配器
        mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return true;
            }
            //获取输入内容
            @Override
            public boolean onQueryTextChange(String newText) {
                //如果newText是长度为0的字符串,则显示下面的指定搜索内容,不显示listview和联系人
                if (TextUtils.isEmpty(newText)){
                    label.setVisibility(View.VISIBLE);
                    mListView.setVisibility(View.GONE);
                    top.setVisibility(View.GONE);
                }else { //否则显示listview显示结果,其他都隐藏掉
                    label.setVisibility(View.GONE);
                    mListView.setVisibility(View.VISIBLE);
                    System.out.println("+++++" + newText);
                    list1 = new ArrayList<>();//创建集合,存储检索到的数据
                    /*检索数据*/
                    for (int i = 0; i < list.size(); i ++) {
                        char[] inputText = newText.toCharArray();
                        char[] chars = list.get(i).getName().toCharArray();
                            for (int j = 0; j < inputText.length; j++) {
                                if (j < chars.length) {
                                    if (inputText[j] == chars[j] ||
                                            newText.equalsIgnoreCase(list.get(i).getFirstLetter())) {
                                        if (j == (inputText.length - 1)) {
                                            top.setVisibility(View.VISIBLE);
                                            list1.add(new User(list.get(i).getName()));
                                        }
                                    }else {
                                        break;
                                    }
                                }
                            }
                    }
                    if (list1.size() != 0) {
                        //创建自定义的适配器,用于把数据显示在组件上
                        BaseAdapter adapter = new SearchSortAdapter(getApplicationContext(), data,
                                list1, newText, mListView);
                        //设置适配器
                        mListView.setAdapter(adapter);
            

以上是关于android 仿微信demo————微信顶部操作栏搜索按钮实现(查询通讯录好友功能)的主要内容,如果未能解决你的问题,请参考以下文章

android 仿微信demo————微信顶部操作栏加号按钮实现(弹出子菜单)

android 仿微信demo————微信顶部操作栏加号按钮实现(弹出子菜单)

android 仿微信demo————微信顶部操作栏搜索按钮实现(查询通讯录好友功能)

android 仿微信demo————微信顶部操作栏搜索按钮实现(查询通讯录好友功能)

android 仿微信demo————注册功能实现(服务端)

android 仿微信demo————微信发现界面实现