1. 程式人生 > >Android實現列表仿聯絡人快速查詢和關鍵字搜尋

Android實現列表仿聯絡人快速查詢和關鍵字搜尋



列表按字母順序排序,右側實現根據首字母快速查詢,輸入框輸入首字母或元素第一個字也可以實現快速查詢。


頁面佈局如下:

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

<com.example.demo.view.ClearEditText

android:id="@+id/et"

android:layout_width="match_parent"

android:layout_height="50dp"

android:layout_margin="10dp"

android:background="@drawable/arrow_down"

android:hint="快速查詢">

</com.example.demo.view.ClearEditText>

<FrameLayout

android:layout_width="fill_parent"

android:layout_height="fill_parent">

<ListView

android:id="@+id/lv"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_gravity="center"

android:layout_marginLeft="10dp"

android:layout_marginRight="20dp"

android:divider="@null"

android:scrollbars

="none"/>

<TextView

android:id="@+id/tv"

android:layout_width="80.0dip"

android:layout_height="80.0dip"

android:layout_gravity="center"

android:background="@drawable/text_shape_bg2"

android:gravity="center"

android:textColor="#ffffffff"

android:textSize="30.0dip"

android:visibility="invisible"/>

<com.example.demo.view.SideBar

android:id="@+id/sidrbar"

android:layout_width="30.0dip"

android:layout_height="fill_parent"

android:layout_gravity="right|center"/>

</FrameLayout>

</LinearLayout>

在佈局檔案中,輸入框ClearEditText和快速查詢的SideBar需要自定義實現。

ClearEditText

publicclass ClearEditTextextends EditTextimplements OnFocusChangeListener,

TextWatcher {

/**

*刪除按鈕的引用

*/

private DrawablemClearDrawable;

public ClearEditText(Context context) {

this(context,null);

}

//這個構造方法也很重要,不加這個很多屬性不能再XML裡面定義

public ClearEditText(Context context, AttributeSet attrs) {

this(context, attrs, android.R.attr.editTextStyle);

}

public ClearEditText(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

init();

}

privatevoid init() {

//獲取EditText的刪除文字圖片,假如沒有設定我們就使用預設的圖片

mClearDrawable = getCompoundDrawables()[2];

if (mClearDrawable ==null) {

mClearDrawable = getResources().getDrawable(

R.drawable.emotionstore_progresscancelbtn);

}

//圖片被繪製的區域

mClearDrawable.setBounds(0, 0,

mClearDrawable.getIntrinsicWidth() / 3 * 2,

mClearDrawable.getIntrinsicHeight() / 3 * 2);

setClearIconVisible(false);

setOnFocusChangeListener(this);

addTextChangedListener(this);

}

/**

*因為我們不能直接給EditText設定點選事件,所以我們用記住我們按下的位置來模擬點選事件當我們按下的位置橫座標在( EditText的寬-

*圖示到控制元件右邊的間距-圖示的寬)EditText的寬-圖示到控制元件右邊的間距)之間我們就算點選了圖示,豎直方向沒有考慮

*/

@Override

publicbooleanonTouchEvent(MotionEvent event) {

if (getCompoundDrawables()[2] !=null) {

if (event.getAction() == MotionEvent.ACTION_UP) {

boolean touchable = event.getX() > (getWidth()

- getPaddingRight() -mClearDrawable

.getIntrinsicWidth())

&&(event.getX() < ((getWidth() - getPaddingRight())));

if (touchable) {

this.setText("");

}

}

}

returnsuper.onTouchEvent(event);

}

/**

*ClearEditText焦點發生變化的時候,判斷裡面字串長度設定清除圖示的顯示與隱藏

*/

@Override

publicvoid onFocusChange(View v,boolean hasFocus) {

if (hasFocus) {

setClearIconVisible(getText().length()> 0);

}else {

setClearIconVisible(false);

}

}

/**

*設定清除圖示的顯示與隱藏,呼叫setCompoundDrawablesEditText繪製上去

*

*@param visible

*/

protectedvoid setClearIconVisible(boolean visible) {

Drawable right = visible ?mClearDrawable :null;

setCompoundDrawables(getCompoundDrawables()[0],

getCompoundDrawables()[1], right, getCompoundDrawables()[3]);

}

/**

*當輸入框裡面內容發生變化的時候回撥的方法

*/

@Override

publicvoid onTextChanged(CharSequence s,int start,int count,int after) {

setClearIconVisible(s.length()> 0);

}

@Override

publicvoid beforeTextChanged(CharSequence s,int start,int count,

int after) {

}

@Override

publicvoid afterTextChanged(Editable s) {

}

/**

*設定晃動動畫控制元件晃動(根據需求)

*/

publicvoid setShakeAnimation() {

this.setAnimation(shakeAnimation(5));

}

/**

*晃動動畫

*

*@param counts

*1秒鐘晃動多少次

*@return

*/

publicstatic Animation shakeAnimation(int counts) {

AnimationtranslateAnimation =new TranslateAnimation(0, 10, 0, 0);

translateAnimation.setInterpolator(new CycleInterpolator(counts));

translateAnimation.setDuration(1000);

return translateAnimation;

}

SideBar

publicclass SideBarextends View {

//觸控事件

private OnTouchingLetterChangedListeneronTouchingLetterChangedListener;

// 26個字元

publicstatic String[]b = {"A","B","C","D","E","F","G","H","I",

"J","K","L","M","N","O","P","Q","R","S","T","U","V",

"W","X","Y","Z","#" };

privateintchoose = -1;//選中

private Paintpaint =new Paint();

private TextViewmTextDialog;

publicvoid setTextView(TextView mTextDialog) {

this.mTextDialog = mTextDialog;

}

public SideBar(Context context, AttributeSet attrs,int defStyle) {

super(context, attrs, defStyle);

}

public SideBar(Context context, AttributeSet attrs) {

super(context, attrs);

}

public SideBar(Context context) {

super(context);

}

/**

*重寫這個方法

*/

protectedvoid onDraw(Canvas canvas) {

相關推薦

Android實現列表仿聯絡人快速查詢關鍵字搜尋

 列表按字母順序排序,右側實現根據首字母快速查詢,輸入框輸入首字母或元素第一個字也可以實現快速查詢。 頁面佈局如下: <LinearLayoutxmlns:andro

使用mybatis提供的各種標籤方法實現動態拼接Sql。這裡演示where標籤if標籤實現使用姓名的模糊查詢性別查詢使用者列表,當用戶沒有選擇姓名以及性別時查詢出所有的記錄。

1.需求:   使用姓名的模糊查詢和性別查詢使用者列表,當用戶沒有選擇姓名以及性別時查詢出所有的記錄。 2.在UserMapper介面中定義方法:   public List<User> findUserByNameAndSex(User user); 3.在UserMapper.xml中

Java實現單鏈表的快速排序歸並排序

解法 nod sin fonts 但是 二叉 復雜 sort tno 本文描述了LeetCode 148題 sort-list 的解法。 題目描述如下: Sort a linked list in O(n log n) time using constant space c

Sphinx 實現海量資料的快速查詢

來源:https://blog.csdn.net/qq_28018283/article/details/72622003   說到 Sphinx,就會想到:站內搜尋,mysql優化,分詞 等等有關搜尋海量資料的需求,本文介紹了 sphinx的基本概念

Android 實現仿iOS桌面效果之可拖動的GridView(上)

     最近專案中遇到一個LIstview的拖動效果,github上一搜發現有叫DragListview的開源專案,然後自己再小手一搜拖動排序的GridView,卻沒發現什麼很全很好的開源專案,後

Android實現從底部彈出Dialog(PopWindow實現的效果一樣)

上菜,不,上圖:       相信上圖的效果,大家在android 裝置中經常碰到.有時候進行分享操作的時候-----要求從從底部自下而上彈出.上圖中的效果**既可以通過自定義Dialog實現也可以通過自定義PopWindow來實現.**關於popWindow

使用Python實現列表元素的二分查詢

# coding=utf-8'''順序表的二分查詢法'''def Twosearch(item,element): ''' 遞迴呼叫實現順序表的二分查詢 :param item: :param element: :return: ''' n = len(item)

Android實現一鍵清除輸入內容震動效果的EditText

        Android系統自帶的EditText總的來說,功能相對簡單,不能滿足產品與UI的奇思妙想的功能(逃),所以我們勢必要對輸入框功能進行一定的拓展,這次我們來實現一鍵清除輸入內容的功能,畢竟不能讓使用者一直按著刪除鍵來刪除吧(我覺著很有道理),以及輸入內容有誤

Vim快速查詢替換

VIM是被譽為非常高效的文字編輯軟體。但是掌握並高效的使用是件有難度的事情。在VIM中進行快速的查詢和替換是提高VIM使用效率的重要方法。下面是我在閱讀VIM使用者手冊時整理的一些資料: 行內搜尋 f命令可以進行行內搜尋。輸入fx可以找到下一個x字元。

java/android列表進行首字母排序過濾相同字串

List<String> topicNames = new ArrayList<>(new HashSet<>(topicName)); if (!topicNames.isEmpty()) { //不為空 Collecti

Android實現多條Toast快速顯示(強制中止上一條Toast的顯示)

Android實現多條Toast快速顯示 Toast多用於我們開發人員除錯使用,有時候也作為給使用者的弱提示使用,我們常用的方法是 Toast.makeText(this, "彈出Toa

Android實現列表抽屜展示效果

終於迎來的週末哇,深圳兩天的涼雨天終於迎來晴日。早上爬起來異常的累,哎。。每天地鐵兩小時真是強身健體啊~ 今天給大家帶來一篇關於Android UI的文章:列表Item抽屜展示效果。單說沒意思,不然大家又該說我是標題黨了。我來筆墨描述下場景: 例如當我們點選某個Item項時

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

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

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

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

【JAVAEE學習筆記】hibernate02:實體規則、對象狀態、緩存、事務、批量查詢實現客戶列表顯示

使用 ins tro trace ges create 綁定 criteria 命名 一、hibernate中的實體規則 實體類創建的註意事項  1.持久化類提供無參數構造  2.成員變量私有,提供共有get/set方法訪問.需提供屬性  3.持久化類中的屬性,應盡量使用包

卡拉OK歌詞原理實現仿Android網易雲音樂

大家好,我們是愛學啊,繼上一篇講解了【LRC歌詞原理和實現高仿Android網易雲音樂】,今天給大家帶來一篇關於卡拉OK歌詞原理和在Android上如何實現歌詞逐字滾動的效果,本文來自【Android開發專案實戰我的雲音樂】課程。 效果圖 相信大家都懂一張圖勝過千言萬語。 效果和現在市面上大部分播放

LRC歌詞原理實現仿Android網易雲音樂

大家好,我們是愛學啊,今天給大家帶來一篇關於LRC歌詞原理和在Android上如何實現歌詞逐行滾動的效果,本文來自【Android開發專案實戰我的雲音樂】課程;逐字滾動下一篇文章講解。 效果圖 相信大家都懂一張圖勝過千言萬語。 效果和現在市面上大部分播放器差不多,當然如果要運用到商業專案中,肯定還需

Java——用Java實現氣泡排序,選擇排序,快速排序二分查詢

在學習C語言時,就有講過這三個排序演算法和二分查詢的演算法。 以下是用Java來實現氣泡排序(Bubble Sort)演算法,選擇排序(Selection Sort),快速排序(Quick Sort)和二分查詢(Binary Search) package pra_07;

Java——實現氣泡排序,選擇排序,快速排序二分查詢

在學習C語言時,對排序演算法和二分查詢有一定的理解並進行了實現。 不過打算用Java重新實現一下氣泡排序(Bubble Sort),選擇排序(Selection Sort),快速排序(Quick Sort)和二分查詢(binary_search)。 package pra

15-二分查詢(上):圖用最省記憶體的方式實現快速查詢功能?

今天我們講一種針對有序資料集合的查詢演算法:二分查詢(Binary Search)演算法,也叫折半查詢演算法。二分查詢的思想非常簡單,很多非計算機專業的同學很容易就能理解,但是看似越簡單的東西往往越難掌握好,想要靈活應用就更加困難。 老規矩,我們還是來看一道思考