1. 程式人生 > >仿手機和微信通訊錄A-Z姓名排序

仿手機和微信通訊錄A-Z姓名排序

轉載:http://download.csdn.net/download/xiaanming/6394377

前段時間因為換工作的緣故又恰巧碰到國慶節,所以有段時間自己沒有更新部落格了,過完國慶到新公司報道,感覺還不錯,就是現在住的地方離新公司有點遠,地鐵20站,傷不起啊,我每天早上7點多就要起床,然後屁顛屁顛的去擠地鐵上班,晚上下班還要擠地鐵,先不說路程遠,車費一天就要10幾塊,我的銀子啊,有坐龍華線去上班的深圳程式設計師不?聽說那條線上班高峰期很擠?我沒在上班高峰期坐過那趟車,我在民治那邊找了個房子,離華強北也不遠,關鍵房租便宜,哈哈,樂開花了,下個禮拜就要搬過去啦

不扯了,回到主題,今天給大家帶來ListView的A-Z字母排序和過濾搜尋功能並且實現漢字轉成拼音的功能,我們知道一般我們對聯絡人,城市列表等實現A-Z的排序,因為聯絡人和城市列表我們可以直接從資料庫中獲取他的漢字拼音,而對於一般的資料,我們怎麼實現A-Z的排序,我們需要將漢字轉換成拼音就行了,接下來就帶大家實現一般資料的A-Z排序功能,首先先看下效果圖


上面是一個帶刪除按鈕的EditText,我們在輸入框中輸入可以自動過濾出我們想要的東西,當輸入框中沒有資料自動替換到原來的資料列表,然後下面一個ListView用來顯示資料列表,右側是一個字母索引表,當我們點選不同的字母,ListView會定位到該字母地方,瞭解了佈局之後,我們先看下專案結構吧


我按照專案中類的順序來一一介紹其功能

1.SortModel 一個實體類,裡面一個是ListView的name,另一個就是顯示的name拼音的首字母

  1. package com.example.sortlistview;  
  2. public
    class SortModel {  
  3.     private String name;   //顯示的資料
  4.     private String sortLetters;  //顯示資料拼音的首字母
  5.     public String getName() {  
  6.         return name;  
  7.     }  
  8.     publicvoid setName(String name) {  
  9.         this.name = name;  
  10.     }  
  11.     public String getSortLetters() {  
  12.         return sortLetters;  
  13.     }  
  14.     publicvoid setSortLetters(String sortLetters) {  
  15.         this.sortLetters = sortLetters;  
  16.     }  
  17. }  

2.SideBar類就是ListView右側的字母索引View,我們需要使用setTextView(TextView mTextDialog)來設定用來顯示當前按下的字母的TextView,以及使用setOnTouchingLetterChangedListener方法來設定回撥介面,在回撥方法onTouchingLetterChanged(String s)中來處理不同的操作

  1. package com.example.sortlistview;  
  2. import android.content.Context;  
  3. import android.graphics.Canvas;  
  4. import android.graphics.Color;  
  5. import android.graphics.Paint;  
  6. import android.graphics.Typeface;  
  7. import android.graphics.drawable.ColorDrawable;  
  8. import android.util.AttributeSet;  
  9. import android.view.MotionEvent;  
  10. import android.view.View;  
  11. import android.widget.TextView;  
  12. publicclass SideBar extends View {  
  13.     // 觸控事件
  14.     private OnTouchingLetterChangedListener onTouchingLetterChangedListener;  
  15.     // 26個字母
  16.     publicstatic String[] b = { "A""B""C""D""E""F""G""H""I",  
  17.             "J""K""L""M""N""O""P""Q""R""S""T""U""V",  
  18.             "W""X""Y""Z""#" };  
  19.     privateint choose = -1;// 選中
  20.     private Paint paint = new Paint();  
  21.     private TextView mTextDialog;  
  22.     /** 
  23.      * 為SideBar設定顯示字母的TextView 
  24.      * @param mTextDialog 
  25.      */
  26.     publicvoid setTextView(TextView mTextDialog) {  
  27.         this.mTextDialog = mTextDialog;  
  28.     }  
  29.     public SideBar(Context context, AttributeSet attrs, int defStyle) {  
  30.         super(context, attrs, defStyle);  
  31.     }  
  32.     public SideBar(Context context, AttributeSet attrs) {  
  33.         super(context, attrs);  
  34.     }  
  35.     public SideBar(Context context) {  
  36.         super(context);  
  37.     }  
  38.     /** 
  39.      * 重寫這個方法 
  40.      */
  41.     protectedvoid onDraw(Canvas canvas) {  
  42.         super.onDraw(canvas);  
  43.         // 獲取焦點改變背景顏色.
  44.         int height = getHeight();// 獲取對應高度
  45.         int width = getWidth(); // 獲取對應寬度
  46.         int singleHeight = height / b.length;// 獲取每一個字母的高度
  47.         for (int i = 0; i < b.length; i++) {  
  48.             paint.setColor(Color.rgb(336598));  
  49.             // paint.setColor(Color.WHITE);
  50.             paint.setTypeface(Typeface.DEFAULT_BOLD);  
  51.             paint.setAntiAlias(true);  
  52.             paint.setTextSize(20);  
  53.             // 選中的狀態
  54.             if (i == choose) {  
  55.                 paint.setColor(Color.parseColor("#3399ff"));  
  56.                 paint.setFakeBoldText(true);  
  57.             }  
  58.             // x座標等於中間-字串寬度的一半.
  59.             float xPos = width / 2 - paint.measureText(b[i]) / 2;  
  60.             float yPos = singleHeight * i + singleHeight;  
  61.             canvas.drawText(b[i], xPos, yPos, paint);  
  62.             paint.reset();// 重置畫筆
  63.         }  
  64.     }  
  65.     @Override
  66.     publicboolean dispatchTouchEvent(MotionEvent event) {  
  67.         finalint action = event.getAction();  
  68.         finalfloat y = event.getY();// 點選y座標
  69.         finalint oldChoose = choose;  
  70.         final OnTouchingLetterChangedListener listener = onTouchingLetterChangedListener;  
  71.         final

    相關推薦

    仿手機通訊錄A-Z姓名排序

    轉載:http://download.csdn.net/download/xiaanming/6394377 前段時間因為換工作的緣故又恰巧碰到國慶節,所以有段時間自己沒有更新部落格了,過完國慶到新公司報道,感覺還不錯,就是現在住的地方離新公司有點遠,地鐵20站

    Android 仿通訊錄功能,好友排序 + 字母索引

    一、效果圖展示 二、功能特點 1.好友排序:按照拼音順序對好友進行排序,相容英文數字符號等 2.字母索引:右側字母導航條,既可拖動也可點選,聯動ListView滑動 三、實現 接下來就讓我們一步步顯示這個效果吧。 1.右側字母索引的導航條 這個我們可

    Android 仿聯絡人列表 實現ListView的A-Z字母排序過濾搜尋功能

    轉自:http://blog.csdn.net/huazai963184709/article/details/19119021    首先說些這篇文章的初衷是為了給自己打拼留下一些回憶!也為同道減少研究的時間       應公司專案要求實現這個功能,看了網上不少文章,最後參考 兩篇文章各有缺陷,也各有

    Android 使用RecyclerView實現(仿)的聯絡人A-Z字母排序過濾搜尋功能

    之前做專案的時候遇到一個需求是實現品牌的字母排序功能,網上的資料很多,但是有一部分有bug,這篇文章是我學習和解決部分bug之後的總結。今天帶來的是RecyclerView的A-Z字母排序和過濾搜尋功能。 首先上效果圖: 重點:1、實現資料排序分類 2、

    揭祕通訊錄拉群/通訊錄導粉/通訊錄拉小群/手機號碼拉群/號碼資料精準吸粉平臺

    隨著移動網際網路的蓬勃發展,微信已經成為市場使用者最多的手機app,也是迄今為止,粘度最高的軟體,它改變著人們的生活方式的同時,也資深了大量的寄生微信的灰產行業,下面小編就為大家解析目前比較流行的玩法:微信通訊錄拉群。 [ 技術介紹 ] 客戶當天給來資源,第二天晚上

    通訊錄拉群、通訊錄粉、ipad協議、WXID爆粉協議、手機號碼、資料精準吸粉平臺

    大資料時代營銷法則,得微信得財富,得雲控者,得天下      這裡給大家介紹爆粉之外更加暴力的通訊錄拉群,群營銷雲控系統。 在wxid爆粉之後更加暴力出來營銷系統,在微信限制5000好友以來,更加好的儲存客戶,營銷策略那無可置疑的是我們的群營銷。  

    仿通訊錄

    專案用到了通訊錄,仿照微信通訊錄功能,結構很簡單。 列表:RecyclerView 頂部搜尋:自定義EditText 右側快速查詢:自定義view 沒有什麼複雜邏輯,用圖說話 需要注意的是資料格式,看後臺怎麼給資料,該例子是用的本地資料arrays.xml

    React-仿通訊錄控制元件

    起因:產品給了一個需求,要求寫一個跟微信朋友圈一樣,取首字母產生的通訊錄標籤頁, 寫了一遍,發現意外的好寫 最終效果 資料採用了隨機字串的方法,並且使用陣列方法排序, let data = []; let title = [];

    支付寶手機網頁支付公眾號支付接入

           先說支付寶的吧。        第一步:去支付寶新建沙箱應用並申請開通相應許可權,也就是測試環境,完成後去https://auth.alipay.com/login/ant_sso_index.htm?goto=

    cocos creator JavaScript小遊戲開發問題筆記:遊戲在瀏覽器開發工具的模擬器上執行都沒有問題,但手機上執行卻會都別卡。

    最近專案組在開發一款執行在微信小遊戲環境的鬥地主遊戲,專案的第一個版本收尾階段突然出現了一個奇怪的bug,因為之前開發階段的測試都是在瀏覽器以及微信開發工具上的模擬器進行的測試,所以直到臨近專案上線才發現這個問題,具體表現如下:遊戲執行在手機上會特別卡,並且卡一段時間、或者卡

    通訊錄粉、通訊錄拉群、ipad協議、WXID爆粉協議、手機號碼、資料精準吸粉平臺

    大資料時代營銷法則,得微信得財富,得雲控者,得天下 這裡給大家介紹爆粉之外更加暴力的通訊錄拉群,群營銷雲控系統。 在wxid爆粉之後更加暴力出來營銷系統,在微信限制5000好友以來,更加好的儲存客戶,營銷策略那無可置疑的是我們的群營銷。 我們商家有時候手裡有

    手把手教會你Android手機QQ防撤回

    如今QQ和微信都能撤回訊息,當對方撤回了訊息,想看又看不了,是不是很想知道對方撤回了什麼?接下來我就來教會大家阻止對方QQ撤回的訊息和檢視微信撤回的訊息。 1.首先,手機需要獲取root許可權(目前有很多app支援手機一鍵root);然後下載安裝Xpoesd框架並激活(Xp

    Android 仿美團選擇城市、通訊錄、餓了麼點餐列表的導航懸停分組索引列表

    SuspensionIndexBar簡介:快速實現分組懸停、右側索引導航聯動 列表。如 美團選擇城市介面,微信通訊錄介面、餓了麼點餐介面等。SuspensionIndexBar相關博文:喜歡隨手點個star 多謝在哪裡找到我:我的github:我的CSDN部落格:我的稀土掘金

    【Android 仿通訊錄 導航分組列表-下】自定義View為RecyclerView打造右側索引導航欄IndexBar

    本篇文章已授權微信公眾號 guolin_blog (郭霖)獨家釋出 一 概述 在上篇文章(http://blog.csdn.net/zxt0601/article/details/52355199)裡,我們用ItemDecoration為Recy

    React Native 仿通訊錄右側字母快捷操作區

    其實也不能說仿微信,大部分通訊錄都一樣,先來看兩張效果圖 第一張是微信、第二張是我寫的 簡單介紹一下功能點 1、好友排序 2、點選右側快捷操作區,相應跳轉到所屬通訊錄區域 3、ScrollView 在滑動過程中自動匹配右側字母分類,同時作出UI更新

    HTML5中的audio在手機 端的自動播放

    再做H5頁面的時候,發現audio在手機端和微信端添加了autoplay以後還是不可以自動播放,這是因為手機端為了節約流浪所設定的 通常解決方法是給一個互動事件,一定要是互動事件 標籤:<audio loop src="/photo/aa.mp3" id="audi

    【Android】快速實現仿美團選擇城市介面,通訊錄介面

    概述 本文是這個系列的第三篇,不出意外也是終結篇。因為使用經過重構後的控制元件已經可以快速實現市面上帶 索引導航、懸停分組的列表介面了。 在前兩篇裡,我們從0開始,一步一步實現了仿微信通訊錄、餓了麼選餐介面。 (第一篇戳我 第二篇戳我) 這篇文章作為終結

    Android仿通訊錄:懸停頭部分組列表

    今日科技快訊 昨日,vivo與NBA在上海舉辦了戰略釋出會,宣佈vivo將成為NBA在中國唯一的手機

    手機號碼開通篩選

    現在的朋友圈早已被賣面膜、化妝品、衣服的廣告給“攻陷”,10個微商,有9個是做女性用品的微商,8個是賣面膜的!都說女人的錢好賺,事實真的是這樣嗎?實則不然,產品的同質化,已經讓許多微商苦不堪言,銷量更是慘不忍睹。 現在你或許覺得競爭夠激烈了,但我可以肯定的告訴你,今年將會淘

    仿支付寶/的password輸入框效果GridPasswordView解析

    arp 主類 center 大小 str .get fcm android def 仿支付寶/微信的password輸入框效果GridPasswordView解析,把一些設置和一些關鍵的地方列了出來,方便大家使用,可能能夠省一部分的時間,也算是自己的積累吧。