Android项目实践--高仿微信
asmcvc
这个作者很懒,什么都没留下…
展开
-
63、完结
源码参考:https://github.com/huangfangyi/FanXin-based-HuanXin源码参考:https://github.com/huangfangyi/FanXin-based-HuanXin原创 2016-05-09 10:50:59 · 752 阅读 · 0 评论 -
37、微信通讯录联系人列表适配器ContactAdapter
联系人列表项的布局:xml version="1.0" encoding="utf-8"?>LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="wrap_content"android:ori原创 2016-02-25 16:22:19 · 3260 阅读 · 0 评论 -
36、微信通讯录页面
界面:整体是一个ListView用来显示联系人列表,右侧是一个侧边栏,用来显示联系人姓名前的首字母,也就是#,A,B,C...Z布局代码:xml version="1.0" encoding="utf-8"?>LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android原创 2016-02-25 16:21:13 · 1517 阅读 · 0 评论 -
35、公众号(订阅号)消息列表
因为公众号(订阅号)的消息是在聊天界面作为一条集中显示的,点开会又有出现一个新的列表页面,不过大致应与上层列表视图差不多。涉及到一个适配器PublishMsgAdpter和一个点开具体消息的页面PublishMsgDetailActivity,而PublishMsgDetailActivity需要显示具体的消息内容列表,仍然需要一个适配器PublishMsgDetailAdpt原创 2016-02-25 16:19:43 · 2146 阅读 · 0 评论 -
34、JsonUtils
在UserUtils中有一个操作Json的类:user = JSON.parseObject(jsondata, User.class);该JSON类在JsonUtils.jar中,因为Android中操作json的类有很多,不再细述,知道有该库即可。原创 2016-02-25 16:19:25 · 766 阅读 · 0 评论 -
33、FinalDb - afinal库
在UserUtils中有一个操作数据库的类,使用起来很是方便:FinalDb db = FinalDb.create(context, Constants.DB_NAME, false);if (db.findById(user.getId(), User.class) != null) db.deleteById(User.class, user.getId());db.save(us原创 2016-02-25 16:19:06 · 589 阅读 · 0 评论 -
32、使用Spannable对TextView设置复合文本
使用Spannable对TextView设置复合文本,Spannable对文字的编辑减少TextView的拼接并且达到改变一串字符中的部分文字的字体颜色,背景颜色,字体大小,样式 增加文字的超链接。参考:http://blog.csdn.net/g475266696/article/details/7668988原创 2016-02-25 16:18:43 · 481 阅读 · 0 评论 -
31、Pattern
java的正则表达式匹配类,使用先编译后查找匹配。编译:Pattern.compile(Pattern.quote(smile))匹配:matcher详细使用搜索吧。原创 2016-02-25 16:18:19 · 540 阅读 · 0 评论 -
30、微信-表情相关
package com.example.wechat.chat;import android.content.Context;import android.graphics.drawable.Drawable;import android.text.Spannable;import android.text.style.ImageSpan;import com.example.wechat.R;i原创 2016-02-24 13:27:29 · 731 阅读 · 1 评论 -
29、下拉刷新组件SwipeLayout
可以使用com.daimajia.swipelayout库:dependencies { compile 'com.android.support:support-v4:20.+' compile "com.daimajia.swipelayout:library:1.1.7@aar"}参考:http://hao.jobbol原创 2016-02-24 13:26:58 · 868 阅读 · 0 评论 -
28、新消息界面布局与适配器NewMsgAdpter
预览图:布局代码:xml version="1.0" encoding="utf-8"?>LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="wrap_content"a原创 2016-02-24 13:26:11 · 747 阅读 · 0 评论 -
27、微信聊天Fragment_Msg的代码实现
初始化界面时获取所有会话信息,并且创造了一条订阅号信息。根据最后一条消息的时间排序,适配器为NewMsgAdpter,在适配器显示列表项内容时,通过getMessageDigest来获取消息的摘要,也就是不点开看具体消息时的预览消息。继续回到Fragment_Msg的onItemClick,会判断当前点击的消息类型,如果是订阅号消息则打开PublishMsgListActivity原创 2016-02-24 13:25:21 · 1914 阅读 · 0 评论 -
26、微信聊天Fragment_Msg的界面布局
界面:布局:xml version="1.0" encoding="utf-8"?>RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_pare原创 2016-02-24 13:24:30 · 1113 阅读 · 0 评论 -
25、通用的ViewHolder
以前在适配器中使用ViewHolder的方式如下:private class LeftMenuAdapter extends BaseAdapter {private static final String TAG = "BlackNumberAdapter";@Overridepublic int getCount() {return mLeftMenus.size(); }@Ov原创 2016-02-24 13:23:14 · 718 阅读 · 0 评论 -
38、微信通讯录联系人汉语拼音中英文混合排序
拼音相关的:按拼音排序以及中文转拼音一个拼音相关的开源库:pinyin4j.jarpublic class PinyinComparator implements Comparator {@Overridepublic int compare(Object arg0, Object arg1) {// 按照名字排序User user0 = (User) arg0;原创 2016-02-25 16:22:38 · 1982 阅读 · 0 评论 -
39、微信通讯录联系人快速索引侧边栏SideBar
首先参考《36、微信通讯录页面》中SideBar的布局代码,这里看实现代码:public class SideBar extends View {private char[] l;private SectionIndexer sectionIndexter = null;private ListView list;private TextView mDialogText;private原创 2016-02-25 16:23:11 · 2072 阅读 · 0 评论 -
40、微信-搜索好友及公众号页面SearchActivity
布局比较简单,主要是一个网页:LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="原创 2016-03-14 13:35:21 · 1364 阅读 · 1 评论 -
62、LruCache图片缓存
public class ImageCache {private ImageCache() {// use 1/8 of available heap sizecache = new LruCache((int) (Runtime.getRuntime().maxMemory() / 8)) {@Overrideprotected int sizeOf(String key, Bitmap val原创 2016-05-09 10:50:37 · 1081 阅读 · 0 评论 -
61、PasteEditText - 自定义的EditText,用来处理复制粘贴的消息
public class PasteEditText extends EditText {private Context context;public PasteEditText(Context context) {super(context);this.context = context; }public PasteEditText(Context context, AttributeSe原创 2016-05-09 10:50:16 · 1263 阅读 · 0 评论 -
60、微信-聊天页面ChatActivity
包括聊天消息适配器MessageAdapter在内,这个比较复杂,主要是消息的类型比较多:文字,图片,位置,语音,视频,文件。原创 2016-05-09 10:49:55 · 2324 阅读 · 0 评论 -
59、微信-我-设置SettingActivity
xml version="1.0" encoding="utf-8"?>LinearLayoutandroid:gravity="center_horizontal"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"xmlns:android="htt原创 2016-05-09 10:49:38 · 2008 阅读 · 0 评论 -
58、微信-我-我的二维码MyCodeActivity
RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:ba原创 2016-05-09 10:49:00 · 1479 阅读 · 0 评论 -
57、微信-我Fragment_Profile
xml version="1.0" encoding="utf-8"?>LinearLayoutandroid:gravity="center_horizontal"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"xmlns:android="htt原创 2016-05-09 10:48:22 · 1078 阅读 · 0 评论 -
56、Html.fromHtml
tv_money.setText(Html.fromHtml(strmoney));参考:http://www.cnblogs.com/moonvan/archive/2011/04/15/2017041.html原创 2016-05-09 10:47:25 · 456 阅读 · 0 评论 -
55、扫一扫后付款SetMoneyActivity
xml version="1.0" encoding="utf-8"?>LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#f原创 2016-05-09 10:47:01 · 1547 阅读 · 0 评论 -
45、微信-从通讯录添加好友
页面布局仍然使用通用的activity_listview,通过网络获取联系人:@Overrideprotected void initView() { getLoadingDialog("正在获取联系人").show(); String str_contact = Utils.getValue(this, Constants.ContactMsg); RequestP原创 2016-03-14 13:39:03 · 1829 阅读 · 0 评论 -
44、公共页面PublicActivity
public class PublicActivity extends BaseActivity implements View.OnClickListener {private TextView txt_title;private ImageView img_back;@Overridepublic void onCreate(Bundle savedInstanceState) {原创 2016-03-14 13:38:36 · 720 阅读 · 0 评论 -
43、微信-好友详情页面FriendMsgActivity
xml version="1.0" encoding="utf-8"?>LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#e原创 2016-03-14 13:38:17 · 1610 阅读 · 0 评论 -
42、微信-添加新朋友列表适配器
xml version="1.0" encoding="utf-8"?>LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="ver原创 2016-03-14 13:37:21 · 1257 阅读 · 0 评论 -
41、微信-添加新朋友NewFriendsListActivity
使用的是通用的activity_listview布局,但是增加了一个列表头:layout_head = getLayoutInflater().inflate(R.layout.layout_head_newfriend, null);mlistview.addHeaderView(layout_head);mlistview.setAdapter(new NewFriendsAdap原创 2016-03-14 13:36:20 · 1616 阅读 · 0 评论 -
24、微信-标题栏上的下拉菜单式弹窗TitlePopup
布局:xml version="1.0" encoding="utf-8"?> LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android原创 2016-02-24 13:12:29 · 2621 阅读 · 0 评论 -
23、微信-温馨提示对话框WarnTipDialog
这个类重用性蛮好的,以后可以直接借鉴使用。布局:xml version="1.0" encoding="utf-8"?>LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height原创 2016-02-24 13:11:29 · 2213 阅读 · 0 评论 -
22、微信 - 主界面实现
涉及到的类:WarnTipDialog 温馨提示窗口 TitlePopup 点击微信右上角的+时弹出下拉列表窗口。Fragment_Msg 微信聊天界面Fragment_Friends 联系人Fragment_Dicover 发现Fragment_Profile 个人信息原创 2016-02-24 13:10:19 · 1036 阅读 · 0 评论 -
15、BaseDialog的代码
BaseDialog的代码较多,不全贴了,看几个点。重载了众多的getDialog函数以灵活地创建对话框,最终调用:public static BaseDialog getDialog(Context context, CharSequence title, CharSequence messa原创 2016-01-28 19:16:57 · 960 阅读 · 0 评论 -
14、BaseDialog的界面
布局文件:xml version="1.0" encoding="utf-8"?>LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_原创 2016-01-28 19:16:31 · 1252 阅读 · 0 评论 -
13、FlippingLoadingDialog
public class FlippingLoadingDialog extends BaseDialog {private FlippingImageView mFivIcon;private TextView mHtvText;private String mText;public FlippingLoadingDialog(Context context, String text) {sup原创 2016-01-28 19:15:36 · 856 阅读 · 0 评论 -
12、post请求数据
NetClient的post函数:/** * json post方式请求调用方法 返回为json * * @param url 请求地址 * @param params 请求参数 可以为空 * @param res 必须实现此类 处理成功失败等 回调 */public void post(String url, RequestParams params, final JsonHttpRespo原创 2016-01-28 19:14:43 · 960 阅读 · 0 评论 -
11、BaseJsonRes
此类派生自JsonHttpResponseHandler,所在jar包:JunsNetHelper.jar。使用方法参考:http://my.oschina.net/bv10000/blog/206388/** 获得json对象*/public void requestjson() { AsyncHttpClient client = new AsyncHttpClient(原创 2016-01-28 19:14:22 · 1135 阅读 · 0 评论 -
10、BasicNameValuePair
可以理解为最基本的键值对,此类的包为:org.apache.http.message,这边查看到是在android.jar里的,在添加依赖的时候,一定要把scope设置为provide而不是compile,否则会有编译错误。原创 2016-01-28 19:13:58 · 1044 阅读 · 0 评论 -
9、Activity基类BaseActivity
LoginActivity派生自BaseActivity,后面会有很多页面均继承自BaseActivity,用于做一些统一的处理。例如在onCreate里制定一个流程:@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);context =原创 2016-01-28 19:13:41 · 910 阅读 · 0 评论