Android控件组合应用一

        AndroidUI部分为应用程序开发人员提供了极大的便利和灵活性,在此就不一一列举了,本文拟通过一个小例子窥见一斑。

    很多用过新浪微博手机客户端Android版本的童鞋想必都对其主界面的效果印象深刻,见下左图:

Android控件组合应用一_第1张图片      Android控件组合应用一_第2张图片

 

 

    从图中可以看到,主体的列表框是个很复杂的部分,既要能显示头像、微博内容,又要能在微博内容中显示表情、图片、@某人、URL,这些元素混杂在一起,对于某些平台(你懂的J)的UI开发来讲,简直太难了。但在Android上来开发,确实很容易实现,右图就是本程序的运行结果,重点展现了列表框部分的仿照。当然,所用的图片都是来自于新浪的了。

 

 

    下面,我们就一起来看一下这个效果的代码实现。

    首先,需要定义数据模型,主要的数据抽象是SiteBlogUser,分别代表网站、博文、用户,数据模型如下图所示:

 

 

Android控件组合应用一_第3张图片

 

 

    具体成员的含义就不解释了。如果你没用过新浪微博,建议去用一下,或者可以参考http://open.weibo.com/中的开发文档。(其实本文的源码来源于一个聚合了新浪微博和搜狐微博两家网站的Android应用,里面利用了两家网站的开放API实现了一些功能,这里已经把网络通信和业务逻辑全去掉了,原谅我吧)。

 

    这几个类的代码如下:

 

 

view plain copy to clipboard print ?
  1. package com.wenbin.test.site;  
  2.   
  3. public class User{  
  4.     private String profileImageUrl="http://tp3.sinaimg.cn/1500460450/50/1289923764/0";  
  5.     private String screenName="测试";  
  6.     private boolean verified=false;  
  7.   
  8.     public User(){  
  9.           
  10.     }  
  11.   
  12.     public String getProfileImageUrl(){  
  13.         return profileImageUrl;  
  14.     }  
  15.   
  16.     public String getScreenName(){  
  17.         return screenName;  
  18.     }  
  19.   
  20.     public void setProfileImageUrl(String profileImageUrl) {  
  21.         this.profileImageUrl = profileImageUrl;  
  22.     }  
  23.   
  24.     public void setScreenName(String screenName) {  
  25.         this.screenName = screenName;  
  26.     }  
  27.   
  28.     public void setVerified(boolean verified) {  
  29.         this.verified = verified;  
  30.     }  
  31.   
  32.     public boolean isVerified(){  
  33.         return verified;  
  34.     }  
  35. }  

 

 

 

view plain copy to clipboard print ?
  1. package com.wenbin.test.site;  
  2.   
  3. import java.util.Date;  
  4.   
  5. public class Blog implements Comparable<Blog>{  
  6.   
  7.     private Date createAt=new Date(System.currentTimeMillis());  
  8.     private Blog retweetedBlog;  
  9.     private String text="就算把我打的遍体鳞伤也见不得会[泪]?http://blog.csdn.net/caowenbin @移动云_曹文斌 。";  
  10.     private String smallPic="";  
  11.     private String source="IE9";  
  12.     private User user;  
  13.     private Site site;  
  14.   
  15.     public Blog(){  
  16.   
  17.     }  
  18.       
  19.     public Blog(Site site){  
  20.         this.site=site;  
  21.     }  
  22.   
  23.     public boolean isHaveRetweetedBlog(){  
  24.         return retweetedBlog!=null;  
  25.     }  
  26.       
  27.     public Blog getRetweetedBlog(){  
  28.         return retweetedBlog;  
  29.     }  
  30.   
  31.   
  32.     public String getText(){  
  33.         return text;  
  34.     }  
  35.   
  36.     public User getUser(){  
  37.         return user;  
  38.     }  
  39.       
  40.     public String getSmallPic(){  
  41.         return smallPic;  
  42.     }  
  43.   
  44.     public void setRetweetedBlog(Blog retweetedBlog) {  
  45.         this.retweetedBlog = retweetedBlog;  
  46.     }  
  47.   
  48.     public void setText(String text) {  
  49.         this.text = text;  
  50.     }  
  51.       
  52.     public String getInReplyUserScreenName(){  
  53.         if (retweetedBlog!=null && retweetedBlog.getUser()!=null)  
  54.             return retweetedBlog.getUser().getScreenName();  
  55.         else  
  56.             return "";        
  57.     }  
  58.       
  59.     public String getInReplyBlogText(){  
  60.         if (retweetedBlog!=null)  
  61.             return retweetedBlog.getText();  
  62.         else  
  63.             return "";    
  64.     }  
  65.       
  66.     public void setPic(String smallPic){  
  67.         this.smallPic=smallPic;  
  68.     }  
  69.   
  70.     public void setUser(User user) {  
  71.         this.user = user;  
  72.     }  
  73.   
  74.     public int compareTo(Blog another) {  
  75.         int ret=0;  
  76.   
  77.         if (this.createAt.before(another.createAt)){  
  78.             ret=-1;  
  79.         }  
  80.         else if (this.createAt.after(another.createAt)){  
  81.             ret=1;  
  82.         }  
  83.         else{  
  84.             ret=0;    
  85.         }  
  86.   
  87.         return ret;  
  88.     }  
  89.   
  90.     public void setSource(String source) {  
  91.         this.source = source;  
  92.     }  
  93.   
  94.     public String getSource() {  
  95.         return source;  
  96.     }  
  97.   
  98.     public void setSite(Site site) {  
  99.         this.site = site;  
  100.     }  
  101.   
  102.     public Site getSite() {  
  103.         return site;  
  104.     }  
  105.   
  106. }  

 

 

 

view plain copy to clipboard print ?
  1. package com.wenbin.test.site;  
  2.   
  3. import java.util.HashMap;  
  4. import java.util.Iterator;  
  5. import java.util.Map;  
  6. import java.util.Set;  
  7. import java.util.TreeSet;  
  8.   
  9.   
  10. public abstract class Site{  
  11.   
  12.     protected Set<Blog> blogs=new TreeSet<Blog>();  
  13.     protected String name;  
  14.     protected Map<String,String> faceMap=new HashMap<String,String>();  
  15.   
  16.     public Site() {  
  17.         onConstruct();  
  18.     }  
  19.   
  20.     protected abstract void onConstruct();  
  21.       
  22.     public Map<String, String> getFaceMap() {  
  23.         return faceMap;  
  24.     }  
  25.       
  26.     public Set<Blog> getBlogs(){  
  27.         return blogs;  
  28.     }  
  29.       
  30.     public long getBlogsCount(){  
  31.         return blogs.size();  
  32.     }  
  33.       
  34.     public void addBlog(Blog blog){  
  35.         blogs.add(blog);  
  36.     }  
  37.       
  38.     public void removeBlog(Blog blog){  
  39.         blogs.remove(blog);  
  40.     }  
  41.       
  42.     public Iterator<Blog> getBlogsIterator(){  
  43.         return blogs.iterator();  
  44.     }  
  45.       
  46.     public void clearBlogs(){  
  47.         blogs.clear();  
  48.     }  
  49.   
  50.     public String getName(){  
  51.         return name;  
  52.     }  
  53. }  

 

 

 

view plain copy to clipboard print ?
  1. package com.wenbin.test.site;  
  2.   
  3. public class SinaSite extends Site {  
  4.   
  5.     protected void onConstruct(){  
  6.         name="新浪微博";  
  7.         initFaceMap();  
  8.     }  
  9.   
  10.     private void initFaceMap(){  
  11.         faceMap.put("[呵呵]""hehe");  
  12.         faceMap.put("[嘻嘻]""xixi");  
  13.         faceMap.put("[哈哈]""haha");  
  14.         faceMap.put("[爱你]""aini");  
  15.         faceMap.put("[晕]""yun");  
  16.         faceMap.put("[泪]""lei");  
  17.     }  
  18. }  

 

 

 

    先熟悉一下这些代码,下次就利用这些数据来制作基本的列表框。

 

 

——欢迎转载,转载请注明出处 http://blog.csdn.net/caowenbin ——

你可能感兴趣的:(Android控件组合应用一)