friend.xml
**[java]** [view plain](http://blog.csdn.net/csh159/article/details/8955029#)[copy](http://blog.csdn.net/csh159/article/details/8955029#)[print](http://blog.csdn.net/csh159/article/details/8955029#)[?](http://blog.csdn.net/csh159/article/details/8955029#)
<div>
<embed id="ZeroClipboardMovie_1" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" type="application/x-shockwave-flash" width="29" height="15" align="middle" name="ZeroClipboardMovie_1">
</embed>
</div>
</div>
- <?xml version=<span class="string">“1.0”</span> encoding=<span class="string">“utf-8”</span>?>
- <LinearLayout xmlns:android=<span class="string">“http://schemas.android.com/apk/res/android”</span>
- android:layout_width=<span class="string">“match_parent”</span>
- android:layout_height=<span class="string">“match_parent”</span>
- android:orientation=<span class="string">“vertical”</span> >
- <RelativeLayout
- android:layout_width=<span class="string">“fill_parent”</span>
- android:layout_height=<span class="string">“fill_parent”</span>
- android:orientation=<span class="string">“vertical”</span> >
-
- <ListView
- android:id=<span class="string">“@+id/list_view”</span>
- android:layout_width=<span class="string">“fill_parent”</span>
- android:layout_height=<span class="string">“wrap_content”</span>
- android:scrollbars=<span class="string">“none”</span> >
- </ListView>
-
- <com.example.menu.MyLetterListView
- android:id=<span class="string">“@+id/my_list_view”</span>
- android:layout_width=<span class="string">“30dip”</span>
- android:layout_height=<span class="string">“fill_parent”</span>
- android:layout_alignParentRight=<span class="string">“true”</span>
- />
- </RelativeLayout>
-
- </LinearLayout>
friend_header.xml
**[html]** [view plain](http://blog.csdn.net/csh159/article/details/8955029#)[copy](http://blog.csdn.net/csh159/article/details/8955029#)[print](http://blog.csdn.net/csh159/article/details/8955029#)[?](http://blog.csdn.net/csh159/article/details/8955029#)
<div>
<embed id="ZeroClipboardMovie_2" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" type="application/x-shockwave-flash" width="29" height="15" align="middle" name="ZeroClipboardMovie_2">
</embed>
</div>
</div>
- <span class="tag"><?</span><span class="tag-name">xml</span> <span class="attribute">version</span>=<span class="attribute-value">“1.0”</span> <span class="attribute">encoding</span>=<span class="attribute-value">“utf-8”</span><span class="tag">?></span>
- <span class="tag"><</span><span class="tag-name">FrameLayout</span> <span class="attribute">xmlns:android</span>=<span class="attribute-value">“http://schemas.android.com/apk/res/android”</span>
- <span class="attribute">android:layout_width</span>=<span class="attribute-value">“fill_parent”</span>
- <span class="attribute">android:layout_height</span>=<span class="attribute-value">“wrap_content”</span>
- <span class="attribute">android:gravity</span>=<span class="attribute-value">“center_vertical”</span>
- <span class="attribute">android:orientation</span>=<span class="attribute-value">“horizontal”</span>
- <span class="attribute">android:paddingLeft</span>=<span class="attribute-value">“2dip”</span>
- <span class="attribute">android:paddingRight</span>=<span class="attribute-value">“2dip”</span> <span class="tag">></span>
-
- <span class="tag"><</span><span class="tag-name">TextView</span>
- <span class="attribute">android:id</span>=<span class="attribute-value">“@+id/friend_search_head_title”</span>
- <span class="attribute">android:layout_width</span>=<span class="attribute-value">“wrap_content”</span>
- <span class="attribute">android:layout_height</span>=<span class="attribute-value">“wrap_content”</span>
- <span class="attribute">android:layout_gravity</span>=<span class="attribute-value">“center”</span>
- <span class="attribute">android:clickable</span>=<span class="attribute-value">“true”</span>
- <span class="attribute">android:textSize</span>=<span class="attribute-value">“20sp”</span> <span class="tag">></span>
- <span class="tag"></</span><span class="tag-name">TextView</span><span class="tag">></span>
-
- <span class="tag"><</span><span class="tag-name">ImageView</span>
- <span class="attribute">android:id</span>=<span class="attribute-value">“@+id/friend_center_back”</span>
- <span class="attribute">android:layout_width</span>=<span class="attribute-value">“wrap_content”</span>
- <span class="attribute">android:layout_height</span>=<span class="attribute-value">“wrap_content”</span>
- <span class="attribute">android:layout_gravity</span>=<span class="attribute-value">“right|center”</span>
- <span class="attribute">android:clickable</span>=<span class="attribute-value">“true”</span> <span class="tag">></span>
- <span class="tag"></</span><span class="tag-name">ImageView</span><span class="tag">></span>
- <span class="tag"></</span><span class="tag-name">FrameLayout</span><span class="tag">></span>
list_item.xml
**[html]** [view plain](http://blog.csdn.net/csh159/article/details/8955029#)[copy](http://blog.csdn.net/csh159/article/details/8955029#)[print](http://blog.csdn.net/csh159/article/details/8955029#)[?](http://blog.csdn.net/csh159/article/details/8955029#)
<div>
<embed id="ZeroClipboardMovie_3" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" type="application/x-shockwave-flash" width="29" height="15" align="middle" name="ZeroClipboardMovie_3">
</embed>
</div>
</div>
- <span class="tag"><?</span><span class="tag-name">xml</span> <span class="attribute">version</span>=<span class="attribute-value">“1.0”</span> <span class="attribute">encoding</span>=<span class="attribute-value">“UTF-8”</span><span class="tag">?></span>
- <span class="tag"><</span><span class="tag-name">RelativeLayout</span> <span class="attribute">xmlns:android</span>=<span class="attribute-value">“http://schemas.android.com/apk/res/android”</span>
- <span class="attribute">android:layout_width</span>=<span class="attribute-value">“match_parent”</span>
- <span class="attribute">android:layout_height</span>=<span class="attribute-value">“match_parent”</span> <span class="tag">></span>
-
- <span class="tag"><</span><span class="tag-name">TextView</span>
- <span class="attribute">android:id</span>=<span class="attribute-value">“@+id/alpha”</span>
- <span class="attribute">android:layout_width</span>=<span class="attribute-value">“fill_parent”</span>
- <span class="attribute">android:layout_height</span>=<span class="attribute-value">“wrap_content”</span>
- <span class="attribute">android:background</span>=<span class="attribute-value">“#333333”</span>
- <span class="attribute">android:paddingLeft</span>=<span class="attribute-value">“10dip”</span>
- <span class="attribute">android:textColor</span>=<span class="attribute-value">“#FFFFFF”</span>
- <span class="attribute">android:visibility</span>=<span class="attribute-value">“gone”</span> <span class="tag">/></span>
-
- <span class="tag"><</span><span class="tag-name">ImageView</span>
- <span class="attribute">android:id</span>=<span class="attribute-value">“@+id/imageView”</span>
- <span class="attribute">android:layout_width</span>=<span class="attribute-value">“wrap_content”</span>
- <span class="attribute">android:layout_height</span>=<span class="attribute-value">“wrap_content”</span>
- <span class="attribute">android:layout_alignParentLeft</span>=<span class="attribute-value">“true”</span>
- <span class="attribute">android:background</span>=<span class="attribute-value">“@drawable/contact_list_icon”</span>
- <span class="attribute">android:layout_below</span>=<span class="attribute-value">“@id/alpha”</span> <span class="tag">/></span>
-
- <span class="tag"><</span><span class="tag-name">View</span>
- <span class="attribute">android:id</span>=<span class="attribute-value">“@+id/divider”</span>
- <span class="attribute">android:layout_width</span>=<span class="attribute-value">“1.0dip”</span>
- <span class="attribute">android:layout_height</span>=<span class="attribute-value">“fill_parent”</span>
- <span class="attribute">android:layout_below</span>=<span class="attribute-value">“@id/alpha”</span>
- <span class="attribute">android:layout_marginRight</span>=<span class="attribute-value">“11.0dip”</span>
- <span class="attribute">android:layout_toRightOf</span>=<span class="attribute-value">“@id/imageView”</span> <span class="tag">/></span>
-
- <span class="tag"><</span><span class="tag-name">TextView</span>
- <span class="attribute">android:id</span>=<span class="attribute-value">“@+id/name”</span>
- <span class="attribute">android:layout_width</span>=<span class="attribute-value">“wrap_content”</span>
- <span class="attribute">android:layout_height</span>=<span class="attribute-value">“wrap_content”</span>
- <span class="attribute">android:layout_alignTop</span>=<span class="attribute-value">“@id/divider”</span>
- <span class="attribute">android:layout_marginLeft</span>=<span class="attribute-value">“2.0dip”</span>
- <span class="attribute">android:layout_marginRight</span>=<span class="attribute-value">“5.0dip”</span>
- <span class="attribute">android:layout_marginTop</span>=<span class="attribute-value">“6.0dip”</span>
- <span class="attribute">android:layout_toRightOf</span>=<span class="attribute-value">“@id/divider”</span>
- <span class="attribute">android:singleLine</span>=<span class="attribute-value">“true”</span>
- <span class="attribute">android:textAppearance</span>=<span class="attribute-value">“?android:textAppearanceMedium”</span> <span class="tag">/></span>
-
- <span class="tag"><</span><span class="tag-name">TextView</span>
- <span class="attribute">android:id</span>=<span class="attribute-value">“@+id/number”</span>
- <span class="attribute">android:layout_width</span>=<span class="attribute-value">“wrap_content”</span>
- <span class="attribute">android:layout_height</span>=<span class="attribute-value">“wrap_content”</span>
- <span class="attribute">android:layout_alignLeft</span>=<span class="attribute-value">“@id/name”</span>
- <span class="attribute">android:layout_alignWithParentIfMissing</span>=<span class="attribute-value">“true”</span>
- <span class="attribute">android:layout_below</span>=<span class="attribute-value">“@id/name”</span>
- <span class="attribute">android:ellipsize</span>=<span class="attribute-value">“marquee”</span>
- <span class="attribute">android:singleLine</span>=<span class="attribute-value">“true”</span>
- <span class="attribute">android:textAppearance</span>=<span class="attribute-value">“?android:textAppearanceSmall”</span> <span class="tag">/></span>
-
- <span class="tag"></</span><span class="tag-name">RelativeLayout</span><span class="tag">></span>
overlay.xml
**[html]** [view plain](http://blog.csdn.net/csh159/article/details/8955029#)[copy](http://blog.csdn.net/csh159/article/details/8955029#)[print](http://blog.csdn.net/csh159/article/details/8955029#)[?](http://blog.csdn.net/csh159/article/details/8955029#)
<div>
<embed id="ZeroClipboardMovie_4" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" type="application/x-shockwave-flash" width="29" height="15" align="middle" name="ZeroClipboardMovie_4">
</embed>
</div>
</div>
- <span class="tag"><?</span><span class="tag-name">xml</span> <span class="attribute">version</span>=<span class="attribute-value">“1.0”</span> <span class="attribute">encoding</span>=<span class="attribute-value">“utf-8”</span><span class="tag">?></span>
- <span class="tag"><</span><span class="tag-name">TextView</span> <span class="attribute">xmlns:android</span>=<span class="attribute-value">“http://schemas.android.com/apk/res/android”</span>
- <span class="attribute">android:layout_width</span>=<span class="attribute-value">“match_parent”</span>
- <span class="attribute">android:layout_height</span>=<span class="attribute-value">“match_parent”</span>
- <span class="attribute">android:orientation</span>=<span class="attribute-value">“vertical”</span> <span class="tag">></span>
-
-
- <span class="tag"></</span><span class="tag-name">TextView</span><span class="tag">></span>
suspend_search.xml
**[html]** [view plain](http://blog.csdn.net/csh159/article/details/8955029#)[copy](http://blog.csdn.net/csh159/article/details/8955029#)[print](http://blog.csdn.net/csh159/article/details/8955029#)[?](http://blog.csdn.net/csh159/article/details/8955029#)
<div>
<embed id="ZeroClipboardMovie_5" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" type="application/x-shockwave-flash" width="29" height="15" align="middle" name="ZeroClipboardMovie_5">
</embed>
</div>
</div>
- <span class="tag"><?</span><span class="tag-name">xml</span> <span class="attribute">version</span>=<span class="attribute-value">“1.0”</span> <span class="attribute">encoding</span>=<span class="attribute-value">“utf-8”</span><span class="tag">?></span>
- <span class="tag"><</span><span class="tag-name">ImageView</span> <span class="attribute">xmlns:android</span>=<span class="attribute-value">“http://schemas.android.com/apk/res/android”</span>
- <span class="attribute">android:layout_width</span>=<span class="attribute-value">“match_parent”</span>
- <span class="attribute">android:layout_height</span>=<span class="attribute-value">“match_parent”</span>
- <span class="attribute">android:orientation</span>=<span class="attribute-value">“vertical”</span> <span class="tag">></span>
-
- <span class="tag"></</span><span class="tag-name">ImageView</span><span class="tag">></span>
Friend.java
**[java]** [view plain](http://blog.csdn.net/csh159/article/details/8955029#)[copy](http://blog.csdn.net/csh159/article/details/8955029#)[print](http://blog.csdn.net/csh159/article/details/8955029#)[?](http://blog.csdn.net/csh159/article/details/8955029#)
<div>
<embed id="ZeroClipboardMovie_6" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" type="application/x-shockwave-flash" width="29" height="15" align="middle" name="ZeroClipboardMovie_6">
</embed>
</div>
</div>
- <span class="keyword">package</span> com.example.menu;
-
- <span class="keyword">import</span> java.util.ArrayList;
- <span class="keyword">import</span> java.util.HashMap;
- <span class="keyword">import</span> java.util.List;
- <span class="keyword">import</span> java.util.regex.Pattern;
-
- <span class="keyword">import</span> com.example.menu.MyLetterListView.OnTouchingLetterChangedListener;
-
- <span class="keyword">import</span> android.app.Activity;
- <span class="keyword">import</span> android.content.AsyncQueryHandler;
- <span class="keyword">import</span> android.content.ComponentName;
- <span class="keyword">import</span> android.content.ContentResolver;
- <span class="keyword">import</span> android.content.ContentValues;
- <span class="keyword">import</span> android.content.Context;
- <span class="keyword">import</span> android.content.Intent;
- <span class="keyword">import</span> android.database.Cursor;
- <span class="keyword">import</span> android.graphics.PixelFormat;
- <span class="keyword">import</span> android.net.Uri;
- <span class="keyword">import</span> android.os.Bundle;
- <span class="keyword">import</span> android.os.Handler;
- <span class="keyword">import</span> android.provider.ContactsContract;
- <span class="keyword">import</span> android.util.Log;
- <span class="keyword">import</span> android.view.LayoutInflater;
- <span class="keyword">import</span> android.view.View;
- <span class="keyword">import</span> android.view.View.OnClickListener;
- <span class="keyword">import</span> android.view.ViewGroup;
- <span class="keyword">import</span> android.view.Window;
- <span class="keyword">import</span> android.view.WindowManager;
- <span class="keyword">import</span> android.widget.AbsListView;
- <span class="keyword">import</span> android.widget.AbsListView.OnScrollListener;
- <span class="keyword">import</span> android.widget.BaseAdapter;
- <span class="keyword">import</span> android.widget.ImageView;
- <span class="keyword">import</span> android.widget.ListView;
- <span class="keyword">import</span> android.widget.TextView;
- <span class="keyword">import</span> android.widget.Toast;
-
- <span class="keyword">public</span> <span class="keyword">class</span> Friend <span class="keyword">extends</span> Activity
- {
-
- <span class="keyword">private</span> BaseAdapter adapter;
-
- <span class="keyword">private</span> ListView listview;
-
- <span class="keyword">private</span> TextView overlay;
-
- <span class="keyword">private</span> ImageView suspend_search;
-
- <span class="keyword">private</span> MyLetterListView letterListView;
-
- <span class="keyword">private</span> AsyncQueryHandler asyncQuery;
-
- <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> String NAME = <span class="string">“name”</span>, NUMBER = <span class="string">“number”</span>,
- SORT_KEY = <span class="string">“sort_key”</span>;
-
- <span class="keyword">private</span> HashMap<String, Integer> alphaIndexer;
-
- <span class="keyword">private</span> String[] sections;
-
- <span class="keyword">public</span> List<ContentValues> list = <span class="keyword">new</span> ArrayList<ContentValues>();
-
- <span class="keyword">private</span> WindowManager windowManager;
-
- <span class="annotation">@Override</span>
- <span class="keyword">public</span> <span class="keyword">void</span> onCreate(Bundle savedInstanceState)
- {
- <span class="keyword">super</span>.onCreate(savedInstanceState);
- requestWindowFeature(Window.FEATURE_NO_TITLE);
- setContentView(R.layout.friend);
- windowManager =
- (WindowManager) <span class="keyword">this</span>.getSystemService(Context.WINDOW_SERVICE);
- asyncQuery = <span class="keyword">new</span> MyAsyncQueryHandler(getContentResolver());
- listview = (ListView) findViewById(R.id.list_view);
- letterListView = (MyLetterListView) findViewById(R.id.my_list_view);
- letterListView
- .setOnTouchingLetterChangedListener(<span class="keyword">new</span> LetterListViewListener());
-
- alphaIndexer = <span class="keyword">new</span> HashMap<String, Integer>();
- <span class="keyword">new</span> Handler();
- <span class="keyword">new</span> OverlayThread();
- initOverlay();
- initSuSearch();
- <span class="keyword">if</span> (list.size() > <span class="number"></span>)
- {
- }
-
- listview.setOnScrollListener(<span class="keyword">new</span> OnScrollListener()
- {
-
- <span class="annotation">@Override</span>
- <span class="keyword">public</span> <span class="keyword">void</span> onScrollStateChanged(AbsListView view, <span class="keyword">int</span> scrollState)
- {
- suspend_search.setVisibility(View.VISIBLE);
- }
-
- <span class="annotation">@Override</span>
- <span class="keyword">public</span> <span class="keyword">void</span> onScroll(AbsListView view, <span class="keyword">int</span> firstVisibleItem,
- <span class="keyword">int</span> visibleItemCount, <span class="keyword">int</span> totalItemCount)
- {
- suspend_search.setVisibility(View.GONE);
- }
- });
- suspend_search.setOnClickListener(<span class="keyword">new</span> OnClickListener()
- {
-
- <span class="annotation">@Override</span>
- <span class="keyword">public</span> <span class="keyword">void</span> onClick(View v)
- {
- ComponentName friendcName =
- <span class="keyword">new</span> ComponentName(Friend.<span class="keyword">this</span>,
- <span class="string">“com.example.test_intent.FriendSearch”</span>);
- Intent friend_viewIntent = <span class="keyword">new</span> Intent();
- friend_viewIntent.setComponent(friendcName);
- startActivity(friend_viewIntent);
- Toast.makeText(getApplicationContext(), <span class="string">“sousuo”</span>,
- Toast.LENGTH_LONG).show();
- <span class="comment">// TODO Auto-generated method stub</span>
- }
- });
- }
-
- <span class="annotation">@SuppressWarnings</span>(<span class="string">“deprecation”</span>)
- <span class="keyword">public</span> <span class="keyword">void</span> getContent()
- {
- Cursor cur =
- getContentResolver().query(
- ContactsContract.Contacts.CONTENT_URI, <span class="keyword">null</span>, <span class="keyword">null</span>,
- <span class="keyword">null</span>, <span class="keyword">null</span>);
- startManagingCursor(cur);
- }
-
- <span class="annotation">@Override</span>
- <span class="keyword">protected</span> <span class="keyword">void</span> onResume()
- {
- <span class="keyword">super</span>.onResume();
- Uri uri = Uri.parse(<span class="string">“content://com.android.contacts/data/phones”</span>);
- String[] projection = { <span class="string">“_id”</span>, <span class="string">“display_name”</span>, <span class="string">“data1”</span>, <span class="string">“sort_key”</span> };
- asyncQuery.startQuery(<span class="number"></span>, <span class="keyword">null</span>, uri, projection, <span class="keyword">null</span>, <span class="keyword">null</span>,
- <span class="string">“sort_key COLLATE LOCALIZED asc”</span>);
- }
-
- <span class="keyword">private</span> <span class="keyword">class</span> MyAsyncQueryHandler <span class="keyword">extends</span> AsyncQueryHandler
- {
-
- <span class="keyword">public</span> MyAsyncQueryHandler(ContentResolver cr)
- {
- <span class="keyword">super</span>(cr);
- }
-
- <span class="annotation">@Override</span>
- <span class="keyword">protected</span> <span class="keyword">void</span> onQueryComplete(<span class="keyword">int</span> token, Object cookie, Cursor cursor)
- {
-
- cursor.moveToFirst();
- Log.d(<span class="string">“ccccc”</span>,
- cursor.getString(<span class="number"></span>) + <span class="string">” 000 “</span> + cursor.getString(<span class="number">1</span>)
- + <span class="string">” 000 “</span> + cursor.getString(<span class="number">2</span>) + <span class="string">” 000 “</span>
- + cursor.getString(<span class="number">3</span>));
-
- <span class="keyword">while</span> (cursor.moveToNext())
- {
- ContentValues cv = <span class="keyword">new</span> ContentValues();
- cv.put(NAME, cursor.getString(<span class="number">1</span>));
- cv.put(NUMBER, cursor.getString(<span class="number">2</span>));
- cv.put(SORT_KEY, cursor.getString(<span class="number">3</span>));
- list.add(cv);
- }
- <span class="keyword">if</span> (list.size() > <span class="number"></span>)
- {
- setAdapter(list);
- }
- }
-
- }
-
- <span class="keyword">private</span> <span class="keyword">void</span> setAdapter(List<ContentValues> list)
- {
- adapter = <span class="keyword">new</span> ListAdapter(<span class="keyword">this</span>, list);
- listview.setAdapter(adapter);
-
- }
-
- <span class="keyword">private</span> <span class="keyword">class</span> ListAdapter <span class="keyword">extends</span> BaseAdapter
- {
-
- <span class="keyword">private</span> LayoutInflater inflater;
-
- <span class="keyword">private</span> List<ContentValues> list;
-
- <span class="keyword">public</span> ListAdapter(Context context, List<ContentValues> list)
- {
- <span class="keyword">this</span>.inflater = LayoutInflater.from(context);
- <span class="keyword">this</span>.list = list;
- alphaIndexer = <span class="keyword">new</span> HashMap<String, Integer>();
- sections = <span class="keyword">new</span> String[list.size()];
-
- <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number"></span>; i < list.size(); i++)
- {
- String currentStr = getAlpha(list.get(i).getAsString(SORT_KEY));
- String previewStr =
- (i – <span class="number">1</span>) >= <span class="number"></span> ? getAlpha(list.get(i – <span class="number">1</span>).getAsString(
- SORT_KEY)) : <span class="string">” “</span>;
- <span class="keyword">if</span> (!previewStr.equals(currentStr))
- {
- String name = getAlpha(list.get(i).getAsString(SORT_KEY));
- alphaIndexer.put(name, i);
- sections[i] = name;
- }
- }
- }
-
- <span class="annotation">@Override</span>
- <span class="keyword">public</span> <span class="keyword">int</span> getCount()
- {
- <span class="keyword">return</span> list.size();
- }
-
- <span class="annotation">@Override</span>
- <span class="keyword">public</span> Object getItem(<span class="keyword">int</span> position)
- {
- <span class="keyword">return</span> list.get(position);
- }
-
- <span class="annotation">@Override</span>
- <span class="keyword">public</span> <span class="keyword">long</span> getItemId(<span class="keyword">int</span> position)
- {
- <span class="keyword">return</span> position;
- }
-
- <span class="annotation">@Override</span>
- <span class="keyword">public</span> View getView(<span class="keyword">int</span> position, View convertView, ViewGroup parent)
- {
- ViewHolder holder;
-
- <span class="keyword">if</span> (convertView == <span class="keyword">null</span>)
- {
- convertView = inflater.inflate(R.layout.list_item, <span class="keyword">null</span>);
- holder = <span class="keyword">new</span> ViewHolder();
- holder.alpha = (TextView) convertView.findViewById(R.id.alpha);
- holder.name = (TextView) convertView.findViewById(R.id.name);
- holder.number =
- (TextView) convertView.findViewById(R.id.number);
- convertView.setTag(holder);
- }
- <span class="keyword">else</span>
- {
- holder = (ViewHolder) convertView.getTag();
- }
-
- ContentValues cv = list.get(position);
- holder.name.setText(cv.getAsString(NAME));
- holder.number.setText(cv.getAsString(NUMBER));
- String currentStr =
- getAlpha(list.get(position).getAsString(SORT_KEY));
- String previewStr =
- (position – <span class="number">1</span>) >= <span class="number"></span> ? getAlpha(list.get(position – <span class="number">1</span>)
- .getAsString(SORT_KEY)) : <span class="string">” “</span>;
-
- <span class="keyword">if</span> (!previewStr.equals(currentStr))
- {
- holder.alpha.setVisibility(View.VISIBLE);
- holder.alpha.setText(currentStr);
- }
- <span class="keyword">else</span>
- {
- holder.alpha.setVisibility(View.GONE);
- }
-
- <span class="keyword">return</span> convertView;
- }
-
- <span class="keyword">private</span> <span class="keyword">class</span> ViewHolder
- {
-
- TextView alpha;
-
- TextView name;
-
- TextView number;
- }
- }
-
- <span class="keyword">private</span> <span class="keyword">void</span> initSuSearch()<span class="comment">// 搜索</span>
- {
- LayoutInflater inflater = LayoutInflater.from(<span class="keyword">this</span>);
- suspend_search =
- (ImageView) inflater.inflate(R.layout.suspend_search, <span class="keyword">null</span>);
- WindowManager.LayoutParams lp =
- <span class="keyword">new</span> WindowManager.LayoutParams(<span class="number">80</span>, <span class="number">80</span>, <span class="number">170</span>, –<span class="number">280</span>,
- WindowManager.LayoutParams.TYPE_APPLICATION,
- WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
- PixelFormat.TRANSLUCENT);
- windowManager.addView(suspend_search, lp);
- }
-
- <span class="keyword">private</span> <span class="keyword">void</span> initOverlay()
- {
- LayoutInflater inflater = LayoutInflater.from(<span class="keyword">this</span>);
- overlay = (TextView) inflater.inflate(R.layout.overlay, <span class="keyword">null</span>);
- WindowManager.LayoutParams lp =
- <span class="keyword">new</span> WindowManager.LayoutParams(
- <span class="number">120</span>,
- <span class="number">120</span>,
- <span class="number">100</span>,
- <span class="number"></span>,
- WindowManager.LayoutParams.TYPE_APPLICATION,
- WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
- | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
- PixelFormat.TRANSLUCENT);
- <span class="comment">// WindowManager windowManager = (WindowManager)</span>
- <span class="comment">// this.getSystemService(Context.WINDOW_SERVICE);</span>
- windowManager.addView(overlay, lp);
- }
-
- <span class="keyword">private</span> <span class="keyword">class</span> LetterListViewListener <span class="keyword">implements</span>
- OnTouchingLetterChangedListener
- {
-
- <span class="annotation">@Override</span>
- <span class="keyword">public</span> <span class="keyword">void</span> onTouchingLetterChanged(<span class="keyword">final</span> String s, <span class="keyword">float</span> y, <span class="keyword">float</span> x)
- {
- <span class="keyword">if</span> (alphaIndexer.get(s) != <span class="keyword">null</span>)
- {
- <span class="keyword">int</span> position = alphaIndexer.get(s);
-
- listview.setSelection(position);
- overlay.setText(sections[position]);
- overlay.setVisibility(View.VISIBLE);
-
- }
- }
-
- <span class="annotation">@Override</span>
- <span class="keyword">public</span> <span class="keyword">void</span> onTouchingLetterEnd()
- {
- overlay.setVisibility(View.GONE);
- }
- }
-
- <span class="keyword">private</span> <span class="keyword">class</span> OverlayThread <span class="keyword">implements</span> Runnable
- {
-
- <span class="annotation">@Override</span>
- <span class="keyword">public</span> <span class="keyword">void</span> run()
- {
- overlay.setVisibility(View.GONE);
- }
- }
-
- <span class="keyword">private</span> String getAlpha(String str)
- {
- <span class="keyword">if</span> (str == <span class="keyword">null</span>)
- {
- <span class="keyword">return</span> <span class="string">“#”</span>;
- }
-
- <span class="keyword">if</span> (str.trim().length() == <span class="number"></span>)
- {
- <span class="keyword">return</span> <span class="string">“#”</span>;
- }
-
- <span class="keyword">char</span> c = str.trim().substring(<span class="number"></span>, <span class="number">1</span>).charAt(<span class="number"></span>);
-
- Pattern pattern = Pattern.compile(<span class="string">“^[A-Za-z]+$”</span>);
- <span class="keyword">if</span> (pattern.matcher(c + <span class="string">“”</span>).matches())
- {
- <span class="keyword">return</span> (c + <span class="string">“”</span>).toUpperCase();
- }
- <span class="keyword">else</span>
- {
- <span class="keyword">return</span> <span class="string">“#”</span>;
- }
- }
-
- <span class="annotation">@Override</span>
- <span class="keyword">protected</span> <span class="keyword">void</span> onDestroy()
- {
- <span class="keyword">if</span> (windowManager != <span class="keyword">null</span>)<span class="comment">// 防止内存泄露</span>
- {
- windowManager.removeView(overlay);
- windowManager.removeView(suspend_search);
- }
- <span class="keyword">super</span>.onDestroy();
- }
-
- }
MyLetterListView.java
**[java]** [view plain](http://blog.csdn.net/csh159/article/details/8955029#)[copy](http://blog.csdn.net/csh159/article/details/8955029#)[print](http://blog.csdn.net/csh159/article/details/8955029#)[?](http://blog.csdn.net/csh159/article/details/8955029#)
<div>
<embed id="ZeroClipboardMovie_7" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" type="application/x-shockwave-flash" width="29" height="15" align="middle" name="ZeroClipboardMovie_7">
</embed>
</div>
</div>
- <span class="keyword">package</span> com.example.menu;
-
- <span class="keyword">import</span> android.content.Context;
- <span class="keyword">import</span> android.graphics.Canvas;
- <span class="keyword">import</span> android.graphics.Color;
- <span class="keyword">import</span> android.graphics.Paint;
- <span class="keyword">import</span> android.graphics.Typeface;
- <span class="keyword">import</span> android.util.AttributeSet;
- <span class="keyword">import</span> android.view.MotionEvent;
- <span class="keyword">import</span> android.view.View;
-
- <span class="keyword">public</span> <span class="keyword">class</span> MyLetterListView <span class="keyword">extends</span> View
- {
-
- <span class="keyword">private</span> OnTouchingLetterChangedListener onTouchingLetterChangedListener;
-
- <span class="keyword">private</span> String[] b = { <span class="string">“@”</span>, <span class="string">“A”</span>, <span class="string">“B”</span>, <span class="string">“C”</span>, <span class="string">“D”</span>, <span class="string">“E”</span>, <span class="string">“F”</span>, <span class="string">“G”</span>, <span class="string">“H”</span>, <span class="string">“I”</span>, <span class="string">“J”</span>, <span class="string">“K”</span>,
- <span class="string">“L”</span>, <span class="string">“M”</span>, <span class="string">“N”</span>, <span class="string">“O”</span>, <span class="string">“P”</span>, <span class="string">“Q”</span>, <span class="string">“R”</span>, <span class="string">“S”</span>, <span class="string">“T”</span>, <span class="string">“U”</span>, <span class="string">“V”</span>, <span class="string">“W”</span>, <span class="string">“X”</span>,
- <span class="string">“Y”</span>, <span class="string">“Z”</span>, <span class="string">“#”</span> };
-
- <span class="keyword">int</span> choose = –<span class="number">1</span>;
-
- <span class="keyword">private</span> Paint paint = <span class="keyword">new</span> Paint();
-
- <span class="keyword">boolean</span> showBkg = <span class="keyword">false</span>;
-
- <span class="keyword">public</span> MyLetterListView(Context context, AttributeSet attrs, <span class="keyword">int</span> defStyle)
- {
- <span class="keyword">super</span>(context, attrs, defStyle);
-
- }
-
- <span class="keyword">public</span> MyLetterListView(Context context, AttributeSet attrs)
- {
- <span class="keyword">super</span>(context, attrs);
-
- }
-
- <span class="keyword">public</span> MyLetterListView(Context context)
- {
- <span class="keyword">super</span>(context);
- }
-
- <span class="keyword">protected</span> <span class="keyword">void</span> onDraw(Canvas canvas)
- {
- <span class="keyword">super</span>.onDraw(canvas);
- <span class="keyword">if</span> (showBkg)
- {
- canvas.drawColor(Color.parseColor(<span class="string">“#40000000”</span>));
- }
-
- <span class="keyword">int</span> height = getHeight();
- <span class="keyword">int</span> width = getWidth();
- <span class="keyword">int</span> singleHeight = height / b.length;
- <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number"></span>; i < b.length; i++)
- {
- paint.setTextSize(18f);
- paint.setColor(Color.BLACK);
- paint.setTypeface(Typeface.DEFAULT_BOLD);
- paint.setAntiAlias(<span class="keyword">true</span>);
- <span class="keyword">if</span> (i == choose)
- {
- paint.setColor(Color.parseColor(<span class="string">“#3399ff”</span>));
- paint.setFakeBoldText(<span class="keyword">true</span>);
- }
- <span class="keyword">float</span> xPos = width / <span class="number">2</span> – paint.measureText(b[i]) / <span class="number">2</span>;
- <span class="keyword">float</span> yPos = singleHeight * i + singleHeight;
-
- canvas.drawText(b[i], xPos, yPos, paint);
-
- paint.reset();
- }
-
- }
-
- <span class="annotation">@Override</span>
- <span class="keyword">public</span> <span class="keyword">boolean</span> dispatchTouchEvent(MotionEvent event)
- {
- <span class="keyword">final</span> <span class="keyword">int</span> action = event.getAction();
- <span class="keyword">final</span> <span class="keyword">float</span> y = event.getY();
- <span class="keyword">final</span> <span class="keyword">float</span> x = event.getX();
- <span class="keyword">final</span> <span class="keyword">int</span> oldChoose = choose;
- <span class="keyword">final</span> OnTouchingLetterChangedListener listener =
- onTouchingLetterChangedListener;
- <span class="keyword">final</span> <span class="keyword">int</span> c = (<span class="keyword">int</span>) (y / getHeight() * b.length);
-
- <span class="keyword">switch</span> (action)
- {
- <span class="keyword">case</span> MotionEvent.ACTION_DOWN:
- showBkg = <span class="keyword">true</span>;
- <span class="keyword">if</span> (oldChoose != c && listener != <span class="keyword">null</span>)
- {
- <span class="keyword">if</span> (c > <span class="number"></span> && c < b.length)
- {
- listener.onTouchingLetterChanged(b[c], y, x);
- choose = c;
- invalidate();
- }
- }
-
- <span class="keyword">break</span>;
- <span class="keyword">case</span> MotionEvent.ACTION_MOVE:
- <span class="keyword">if</span> (oldChoose != c && listener != <span class="keyword">null</span>)
- {
- <span class="keyword">if</span> (c > <span class="number"></span> && c < b.length)
- {
- listener.onTouchingLetterChanged(b[c], y, x);
- choose = c;
- invalidate();
- }
- }
- <span class="keyword">break</span>;
- <span class="keyword">case</span> MotionEvent.ACTION_UP:
- showBkg = <span class="keyword">false</span>;
- choose = –<span class="number">1</span>;
- listener.onTouchingLetterEnd();
- invalidate();
- <span class="keyword">break</span>;
- }
- <span class="keyword">return</span> <span class="keyword">true</span>;
- }
-
- <span class="annotation">@Override</span>
- <span class="keyword">public</span> <span class="keyword">boolean</span> onTouchEvent(MotionEvent event)
- {
- <span class="keyword">return</span> <span class="keyword">super</span>.onTouchEvent(event);
- }
-
- <span class="keyword">public</span> <span class="keyword">void</span> setOnTouchingLetterChangedListener(
- OnTouchingLetterChangedListener onTouchingLetterChangedListener)
- {
- <span class="keyword">this</span>.onTouchingLetterChangedListener = onTouchingLetterChangedListener;
- }
-
- <span class="keyword">public</span> <span class="keyword">interface</span> OnTouchingLetterChangedListener
- {
-
- <span class="keyword">public</span> <span class="keyword">void</span> onTouchingLetterEnd();
-
- <span class="keyword">public</span> <span class="keyword">void</span> onTouchingLetterChanged(String s, <span class="keyword">float</span> y, <span class="keyword">float</span> x);
- }
- }
别忘了加权限:
**[html]** [view plain](http://blog.csdn.net/csh159/article/details/8955029#)[copy](http://blog.csdn.net/csh159/article/details/8955029#)[print](http://blog.csdn.net/csh159/article/details/8955029#)[?](http://blog.csdn.net/csh159/article/details/8955029#)
<div>
<embed id="ZeroClipboardMovie_8" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" type="application/x-shockwave-flash" width="29" height="15" align="middle" name="ZeroClipboardMovie_8">
</embed>
</div>
</div>
- <span class="tag"><</span><span class="tag-name">uses-permission</span> <span class="attribute">android:name</span>=<span class="attribute-value">“android.permission.READ_CONTACTS”</span> <span class="tag">/></span>
效果图:
转自:http://blog.csdn.net/csh159/article/details/8955029
💬 评论