Android在UI部分為應用程式開發人員提供了極大的便利和靈活性,在此就不一一列舉了,本文擬通過一個小例子窺見一斑。
很多用過新浪微博手機用戶端Android版本的童鞋想必都對其主介面的效果印象深刻,見下左圖:
可以看到,主體的列表框是個很複雜的部分,既要能顯示頭像、微博內容,又要能在微博內容中顯示表情、圖片、@某人、URL,這些元素混雜在一起,對於某些平台(你懂的J)的UI開發來講,簡直太難了。但在Android上來開發,確實很容易實現,右圖就是本程式的運行結果,重點展現了列表框部分的仿照。當然,所用的圖片都是來自於新浪的了。
下面,我們就一起來看一下這個效果的代碼實現。
首先,需要定義資料模型,主要的資料抽象是Site、Blog、User,分別代表網站、博文、使用者,資料模型如所示:
具體成員的含義就不解釋了。如果你沒用過新浪微博,建議去用一下,或者可以參考http://open.weibo.com/中的開發文檔。(其實本文的源碼來源於一個彙總了新浪微博和搜狐微博兩家網站的Android應用,裡面利用了兩家網站的開放API實現了一些功能,這裡已經把網路通訊和商務邏輯全去掉了,原諒我吧)。
這幾個類的代碼如下:
package com.wenbin.test.site;</p><p>public class User{<br />private String profileImageUrl="http://tp3.sinaimg.cn/1500460450/50/1289923764/0";<br />private String screenName="測試";<br />private boolean verified=false;</p><p>public User(){</p><p>}</p><p>public String getProfileImageUrl(){<br />return profileImageUrl;<br />}</p><p>public String getScreenName(){<br />return screenName;<br />}</p><p>public void setProfileImageUrl(String profileImageUrl) {<br />this.profileImageUrl = profileImageUrl;<br />}</p><p>public void setScreenName(String screenName) {<br />this.screenName = screenName;<br />}</p><p>public void setVerified(boolean verified) {<br />this.verified = verified;<br />}</p><p>public boolean isVerified(){<br />return verified;<br />}<br />}
package com.wenbin.test.site;</p><p>import java.util.Date;</p><p>public class Blog implements Comparable<Blog>{</p><p>private Date createAt=new Date(System.currentTimeMillis());<br />private Blog retweetedBlog;<br />private String text="就算把我打的遍體鱗傷也見不得會[淚]?http://blog.csdn.net/caowenbin @移動雲_曹文斌 。";<br />private String smallPic="";<br />private String source="IE9";<br />private User user;<br />private Site site;</p><p>public Blog(){</p><p>}</p><p>public Blog(Site site){<br />this.site=site;<br />}</p><p>public boolean isHaveRetweetedBlog(){<br />return retweetedBlog!=null;<br />}</p><p>public Blog getRetweetedBlog(){<br />return retweetedBlog;<br />}</p><p>public String getText(){<br />return text;<br />}</p><p>public User getUser(){<br />return user;<br />}</p><p>public String getSmallPic(){<br />return smallPic;<br />}</p><p>public void setRetweetedBlog(Blog retweetedBlog) {<br />this.retweetedBlog = retweetedBlog;<br />}</p><p>public void setText(String text) {<br />this.text = text;<br />}</p><p>public String getInReplyUserScreenName(){<br />if (retweetedBlog!=null && retweetedBlog.getUser()!=null)<br />return retweetedBlog.getUser().getScreenName();<br />else<br />return "";<br />}</p><p>public String getInReplyBlogText(){<br />if (retweetedBlog!=null)<br />return retweetedBlog.getText();<br />else<br />return "";<br />}</p><p>public void setPic(String smallPic){<br />this.smallPic=smallPic;<br />}</p><p>public void setUser(User user) {<br />this.user = user;<br />}</p><p>public int compareTo(Blog another) {<br />int ret=0;</p><p>if (this.createAt.before(another.createAt)){<br />ret=-1;<br />}<br />else if (this.createAt.after(another.createAt)){<br />ret=1;<br />}<br />else{<br />ret=0;<br />}</p><p>return ret;<br />}</p><p>public void setSource(String source) {<br />this.source = source;<br />}</p><p>public String getSource() {<br />return source;<br />}</p><p>public void setSite(Site site) {<br />this.site = site;<br />}</p><p>public Site getSite() {<br />return site;<br />}</p><p>}
package com.wenbin.test.site;</p><p>import java.util.HashMap;<br />import java.util.Iterator;<br />import java.util.Map;<br />import java.util.Set;<br />import java.util.TreeSet;</p><p>public abstract class Site{</p><p>protected Set<Blog> blogs=new TreeSet<Blog>();<br />protected String name;<br />protected Map<String,String> faceMap=new HashMap<String,String>();</p><p>public Site() {<br />onConstruct();<br />}</p><p>protected abstract void onConstruct();</p><p>public Map<String, String> getFaceMap() {<br />return faceMap;<br />}</p><p>public Set<Blog> getBlogs(){<br />return blogs;<br />}</p><p>public long getBlogsCount(){<br />return blogs.size();<br />}</p><p>public void addBlog(Blog blog){<br />blogs.add(blog);<br />}</p><p>public void removeBlog(Blog blog){<br />blogs.remove(blog);<br />}</p><p>public Iterator<Blog> getBlogsIterator(){<br />return blogs.iterator();<br />}</p><p>public void clearBlogs(){<br />blogs.clear();<br />}</p><p>public String getName(){<br />return name;<br />}<br />}
package com.wenbin.test.site;</p><p>public class SinaSite extends Site {</p><p>protected void onConstruct(){<br />name="新浪微博";<br />initFaceMap();<br />}</p><p>private void initFaceMap(){<br />faceMap.put("[呵呵]", "hehe");<br />faceMap.put("[嘻嘻]", "xixi");<br />faceMap.put("[哈哈]", "haha");<br />faceMap.put("[愛你]", "aini");<br />faceMap.put("[暈]", "yun");<br />faceMap.put("[淚]", "lei");<br />}<br />}
先熟悉一下這些代碼,下次就利用這些資料來製作基本的列表框。
——歡迎轉載,轉載請註明出處 http://blog.csdn.net/caowenbin ——