- 浏览: 2145008 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1240)
- mac/IOS (287)
- flutter (1)
- J2EE (115)
- android基础知识 (582)
- android中级知识 (55)
- android组件(Widget)开发 (18)
- android 错误 (21)
- javascript (18)
- linux (70)
- 树莓派 (18)
- gwt/gxt (1)
- 工具(IDE)/包(jar) (18)
- web前端 (17)
- java 算法 (8)
- 其它 (5)
- chrome (7)
- 数据库 (8)
- 经济/金融 (0)
- english (2)
- HTML5 (7)
- 网络安全 (14)
- 设计欣赏/设计窗 (8)
- 汇编/C (8)
- 工具类 (4)
- 游戏 (5)
- 开发频道 (5)
- Android OpenGL (1)
- 科学 (4)
- 运维 (0)
- 好东西 (6)
- 美食 (1)
最新评论
-
liangzai_cool:
请教一下,文中,shell、C、Python三种方式控制led ...
树莓派 - MAX7219 -
jiazimo:
...
Kafka源码分析-序列5 -Producer -RecordAccumulator队列分析 -
hp321:
Windows该命令是不是需要安装什么软件才可以?我试过不行( ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
hp321:
Chenzh_758 写道其实直接用一下代码就可以解决了:JP ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
huanghonhpeng:
大哥你真强什么都会,研究研究。。。。小弟在这里学到了很多知识。 ...
android 浏览器
先看一下目录结构:
AndroidManifest.xml配置文件:
values/strings.xml:
values-zh-rCN/strings.xml:
contact.xml布局文件:
contact_list.xml布局文件:
ContactSelectorWidget.java类:
ContactCheckBoxAdapter.java类:
运行结果:
AndroidManifest.xml配置文件:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.iaiai.activity" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name="ContactSelectorWidget" android:label="@string/contact_title"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <!-- 读取联系人 --> <uses-permission android:name="android.permission.READ_CONTACTS" /> <!-- 写入联系人 --> <uses-permission android:name="android.permission.WRITE_CONTACTS" /> <!-- 在SD卡中创建文件与删除文件权限 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <!-- 往SD卡中写入数据权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 电话拨号 --> <uses-permission android:name="android.permission.CALL_PHONE" /> <!-- 访问网络 --> <uses-permission android:name="android.permission.INTERNET" /> <!-- 访问Wi-Fi网络 --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> </manifest>
values/strings.xml:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">iaiai - Contact</string> <string name="contact_title">iaiai - Contact</string> </resources>
values-zh-rCN/strings.xml:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">丸子联系人</string> <string name="contact_title">丸子联系人</string> </resources>
contact.xml布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ListView android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/contactListView"> </ListView> </LinearLayout>
contact_list.xml布局文件:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/contactItems" android:paddingBottom="5dip" android:paddingLeft="12dip" android:paddingTop="5dip" android:paddingRight="12dip"> <ImageView android:id="@+id/contact_img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true"></ImageView> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/contact_name" android:textSize="20dip" android:paddingTop="12px" android:layout_marginLeft="70px"> </TextView> <CheckBox android:id="@+id/contact_checkbox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:focusable="false"></CheckBox> </RelativeLayout>
ContactSelectorWidget.java类:
package com.iaiai.activity; import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.content.ContentResolver; import android.content.ContentUris; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.net.Uri; import android.os.Bundle; import android.provider.ContactsContract; import android.view.Menu; import android.view.MenuItem; import android.widget.ListView; import android.widget.Toast; import com.iaiai.activity.adapter.ContactCheckBoxAdapter; public class ContactSelectorWidget extends Activity { public static final String CONTACT_NAME = "NAME"; // 保存的名字 public static final String CONTACT_ID = "ID"; // ID public static final String CONTACT_FACE = "FACE"; // 头像 private ContactCheckBoxAdapter contactCheckBoxAdapter; // 配置适配器 private ListView list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.contact); list = (ListView) findViewById(R.id.contactListView); // 配置适配器 contactCheckBoxAdapter = new ContactCheckBoxAdapter(this, getData()); // 布局里的控件id // 添加并且显示 list.setAdapter(contactCheckBoxAdapter); } @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(Menu.NONE, 1, 0, android.R.string.ok); menu.add(Menu.NONE, 2, 0, android.R.string.cancel); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case 1: Toast.makeText( this, "selector:" + contactCheckBoxAdapter.onSelectorData().size(), Toast.LENGTH_LONG).show(); break; case 2: Toast.makeText(this, android.R.string.cancel, Toast.LENGTH_LONG) .show(); break; default: break; } return super.onOptionsItemSelected(item); } /** * 获取联系人 * * @return */ private List<Map<String, Object>> getData() { // 组织数据源 List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); ContentResolver contentResolver = getContentResolver(); Cursor cursor = contentResolver.query( ContactsContract.Contacts.CONTENT_URI, null, null, null, null); while (cursor.moveToNext()) { String id = cursor.getString(cursor .getColumnIndex(ContactsContract.Contacts._ID)); // id String name = cursor.getString(cursor .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); // 姓名 Map<String, Object> map = new HashMap<String, Object>(); map.put(CONTACT_ID, id); map.put(CONTACT_NAME, name); map.put(CONTACT_FACE, getContactBitmap(id)); list.add(map); } cursor.close(); // 关闭 return list; } /** * 获得联系人头像 * * @param id * 联系人id * @return */ private Bitmap getContactBitmap(String id) { ContentResolver cr = getContentResolver(); Uri uri = ContentUris.withAppendedId( ContactsContract.Contacts.CONTENT_URI, Long.parseLong(id)); InputStream input = ContactsContract.Contacts .openContactPhotoInputStream(cr, uri); if (input == null) { // Log.e("star","input is null"); InputStream is = getResources().openRawResource(R.drawable.icon); BitmapDrawable bmpDraw = null; bmpDraw = new BitmapDrawable(is); Bitmap aa = null; aa = bmpDraw.getBitmap(); Bitmap newb = Bitmap.createScaledBitmap(aa, 50, 50, false); return newb; } else { Bitmap contactPhoto = BitmapFactory.decodeStream(input); Bitmap newb = Bitmap .createScaledBitmap(contactPhoto, 50, 50, false); return newb; } } }
ContactCheckBoxAdapter.java类:
package com.iaiai.activity.adapter; import java.util.HashMap; import java.util.List; import java.util.Map; import android.content.Context; import android.graphics.Bitmap; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.CheckBox; import android.widget.ImageView; import android.widget.TextView; import com.iaiai.activity.ContactSelectorWidget; import com.iaiai.activity.R; public class ContactCheckBoxAdapter extends BaseAdapter { private LayoutInflater mInflater; private List<Map<String, Object>> listData; // 数据 private Map<Integer, Map<String, Object>> selectMap = new HashMap<Integer, Map<String, Object>>(); // 选择的数据 private class ViewHolder { public ImageView img; public TextView title; public CheckBox checkBox; } public ContactCheckBoxAdapter(Context context, List<Map<String, Object>> listData) { this.mInflater = LayoutInflater.from(context); this.listData = listData; } @Override public int getCount() { return listData.size(); } @Override public Object getItem(int position) { return listData.get(position); } @Override public long getItemId(int position) { return position; } /** * 返回选择的数据,Integer为选择的第几个 * * @return */ public Map<Integer, Map<String, Object>> onSelectorData() { return selectMap; } @Override public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { holder = new ViewHolder(); convertView = mInflater.inflate(R.layout.contact_list, null); holder.img = (ImageView) convertView.findViewById(R.id.contact_img); holder.title = (TextView) convertView .findViewById(R.id.contact_name); holder.checkBox = (CheckBox) convertView .findViewById(R.id.contact_checkbox); holder.checkBox.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (selectMap.get(position) != null) { selectMap.remove(position); } else { selectMap.put(position, listData.get(position)); } } }); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.img.setImageBitmap((Bitmap) listData.get(position).get( ContactSelectorWidget.CONTACT_FACE)); holder.title.setText(listData.get(position) .get(ContactSelectorWidget.CONTACT_NAME).toString()); if (selectMap.get(position) != null) { holder.checkBox.setChecked(true); } else { holder.checkBox.setChecked(false); } return convertView; } }
运行结果:
发表评论
-
按钮点击特效 ShineButton
2016-07-07 18:16 591https://github.com/ChadCSong/ ... -
一个广告轮播组件 BGABanner-Android
2016-07-07 18:15 762https://github.com/bingoogo ... -
RadioGroup实现类似ios的分段选择(UISegmentedControl)控件
2016-01-05 16:44 731在ios7中有一种扁平风格的控件叫做分段选择控件UISegme ... -
自己写的一个GPS卫星地图
2014-01-18 15:16 959自己写的一个GPS卫星地图 代码直接下吧. 下载地址: ... -
android 九宫格密码解锁
2013-11-15 15:02 1992效果: -
android 类似Ios开关按钮,支持滑动切换和动画显示
2013-11-11 08:46 1492效果图: 不多说了,自己去下吧 -
Android之ViewGroup实现九宫格并可拖动位置
2013-11-07 15:44 1948用ViewGroup实现的... 效果图: 下面是代码 ... -
ExpandableListView仿QQ列表,上下可刷新
2013-10-22 09:07 1084效果: 不多说了,需要的直接下载吧 下载地址:htt ... -
android 自定义ImageView实现图片手势滑动,多点触摸放大缩小效果
2013-08-27 10:03 2811实现原理:自定义ImageView对此控件进行相应的layou ... -
listview上下拉组件[自己重写的]
2013-08-06 16:59 248在网上找了好多这类组件总是用得不太顺手,数据一加载多了就卡得不 ... -
android源码分享之小米录音机源码
2013-01-30 10:15 2037MIUI录音机是基于Android原生录音机来开发的,能够运行 ... -
Android 实现书籍翻页效果TXT阅读器源码
2013-01-30 10:08 3308本源码实现TXT阅读翻页效果,修复了翻页时出现的BUG。 ... -
android 做的一个二维码扫描
2013-01-30 10:09 1168效果图片: -
Android 心跳图 demo
2012-01-30 17:33 2371自己做的一个android上的心跳图程序 效果: -
android 浏览器
2011-12-24 09:59 1714效果图: 大家可以在安卓市场中找到此apk安装文件。 ... -
android 记事本
2011-12-24 09:56 1663效果图: 大家可以在安卓市场中找到此apk安装文件。 ... -
Android 自己做的Launcher
2011-10-24 09:40 1826可以实现手动添加桌面,没做删和其它菜单功能实现。 主要是卡在 ... -
Android QQ登录界面
2011-06-22 15:07 3977布局loginpage.xml: <?xml ver ...
相关推荐
Android 最近联系人软件 , widget 方式实现。
10 Android 一个批量删除联系人的Demo 11 Android 指南针程序 12 Android操作数据库实例 13 android连接SQLite数据库-----增加改查+分页 14 Android游戏的心跳效果 15 Android远程登录含有loading登录效果~~完整代码...
NineGridView 类似QQ空间,微信朋友圈,微博主页等,展示图片的九宫格控件,自动根据图片的数量确定图片大小和控件大小...使用前,对于Android Studio的用户,可以选择添加: compile 'com.lzy.widget:ninegridview:0.2
身边现在越来越多人使用上了安卓系统的手机,但是有些操作和使用...如果你对手机拨号屏幕功能性有特殊要求,Android绝对会满足你,点击联系人列表里任意一个用户,按手机menu >选项,里面有关于单个联系人的详细设置
import android.widget.ExpandableListView.ExpandableListContextMenuInfo; public class ExpandableListDemo extends ExpandableListActivity{ private ExpandableListAdapter adapter; //private ...
Android 进一步推进了 " 随时随地为每个人提供信息 " 这一企 业 目标的实现。 � Open Handset Alliance 汇集了多家业界巨头。运营商如: China Mobile 、 NTT DoCoMo 、 Vodafone 、 T-M obile 等;设备制造商如 ...
9.1.4 在线状态和联系人列表简介 282 9.1.5 管理聊天会话 285 9.1.6 发送和接收数据信息 289 9.2 SMS简介 291 9.2.1 在应用程序中使用SMS 291 9.2.2 发送SMS信息 291 9.2.3 监听SMS消息 294 9.2.4 紧急响应...
书名:《Android编程入门很简单》(清华大学出版社.王勇)。 压缩打包成2部分,这是第1部分。 本书是一本与众不同的Android学习读物,是一本化繁为简,把抽象问题具体化,把...第13章联系人助手 第14章个人轨迹跟踪器
import java.util.ArrayList;import java.util.HashMap; import android.app.Activity;import android.database.Cursor;import android.os.Bundle;import android.provider....import android.widget.ListVie
第9章 P2P通信 9.1 Android即时消息简介 9.1.1 使用GTalk服务 9.1.2 和GTalk服务绑定 9.1.3 建立GTalk连接,开始一个IM会话 9.1.4 在线状态和联系人列表简介 9.1.5 管理聊天会话 9.1.6 发送和接收数据信息 9.2 SMS...
书名:《Android编程入门很简单》(清华大学出版社.王勇)。 压缩打包成2部分,这是第2部分。 本书是一本与众不同的Android学习读物,是一本化繁为简,把抽象问题具体化,把...第13章联系人助手 第14章个人轨迹跟踪器
Android 简单联系人小工具 另一个适用于主屏幕的简单联系人小工具。 该小部件具有简约的 Holo 主题。 小部件配置仅在创建时完成,如果您需要修改设置,则需要删除小部件并将其重新添加到主屏幕。 我为自己构建了这...
6.3 群发拜年短信给联系人 309 6.4 开始与停止系统服务 312 6.5 通过短信发送e-mail通知 316 6.6 手机拨接状态 321 6.7 有来电,发送邮件通知 324 6.8 存储卡剩余多少容量 326 6.9 访问本机内存...
系统服务及研发的整合:网络搜索、联系人、音乐、应用程序、定制手机文件管理、记忆卡I/O存取、双向短信、闹钟服务、开机程序、来电通信互动、拜年短信、信息提醒、电池电量显示、进度显示、取得应用程序信息等。...
系统服务及研发的整合:网络搜索、联系人、音乐、应用程序、定制手机文件管理、记忆卡I/O存取、双向短信、闹钟服务、开机程序、来电通信互动、拜年短信、信息提醒、电池电量显示、进度显示、取得应用程序信息等。...
系统服务及研发的整合:网络搜索、联系人、音乐、应用程序、定制手机文件管理、记忆卡I/O存取、双向短信、闹钟服务、开机程序、来电通信互动、拜年短信、信息提醒、电池电量显示、进度显示、取得应用程序信息等。...
系统服务及研发的整合:网络搜索、联系人、音乐、应用程序、定制手机文件管理、记忆卡I/O存取、双向短信、闹钟服务、开机程序、来电通信互动、拜年短信、信息提醒、电池电量显示、进度显示、取得应用程序信息等。...
6.3 群发拜年短信给联系人——ACTION_PICK与Uri对象 6.4 开始与停止系统服务——Service与Runnable整合并用 6.5 通过短信发送email通知——BroadcastReceiver与Intent整合 6.6 手机拨接状态——PhoneStateListener之...