The text messaging software for Android, such as Mi text messages, has a conversational chat effect. I personally feel very good. Now I can simply imitate it.
The effect is as follows:
To achieve this, two different XML layout files are required.
Me: list_say_me_item.xml:
<? XML version = "1.0" encoding = "UTF-8"?> <Br/> <linearlayout <br/> xmlns: Android = "http://schemas.android.com/apk/res/android" <br/> Android: layout_width = "fill_parent" <br/> Android: layout_height = "wrap_content" <br/> Android: Orientation = "horizontal" <br/> <imageview <br/> Android: layout_width = "42px" <br/> Android: layout_height = "42px" <br/> Android: layout_gravity = "bottom" <br/> Android: id = "@ + ID/messagegedetail_rov_icon" <br/> Android: background = "@ drawable/image1" <br/> <linearlayout <br/> Android: Orientation = "vertical" <br/> Android: layout_width = "249dp" <br/> Android: layout_height = "wrap_content" <br/> Android: Background = "@ drawable/incoming" <br/> Android: layout_marginleft = "5dp" <br/> <linearlayout <br/> Android: Orientation = "horizontal" <br/> Android: layout_width = "fill_parent" <br/> Android: layout_height = "22dip" <br/> <textview <br/> Android: id = "@ + ID/messagedetail_row_name" <br/> Android: layout_width = "wrap_content" <br/> Android: layout_height = "wrap_content" <br/> Android: textcolor = "#000000" <br/> Android: paddingtop = "2px" <br/> Android: textsize = "16dip" <br/> <textview <br/> Android: Id = "@ + ID/messagedetail_row_date" <br/> Android: layout_width = "wrap_content" <br/> Android: layout_height = "wrap_content" <br/> Android: textcolor = "#000000" <br/> Android: paddingtop = "2px" <br/> Android: textsize = "16dip" <br/> Android: layout_marginleft = "60dip" <br/> </linearlayout> <br/> <textview <br/> Android: id = "@ + ID/messagedetail_row_text" <br/> Android: layout_width = "fill_parent" <br/> Android: layout_height = "wrap_content" <br/> Android: paddingleft = "2px" <br/> Android: textcolor = "# mongodd" <br/> Android: textsize = "16dip" <br/> </linearlayout> <br/>
Peer: list_say_he_item.xml:<? XML version = "1.0" encoding = "UTF-8"?> <Br/> <linearlayout <br/> xmlns: Android = "http://schemas.android.com/apk/res/android" <br/> Android: layout_width = "fill_parent" <br/> Android: layout_height = "wrap_content" <br/> Android: Orientation = "horizontal" <br/> Android: layout_marginleft = "10px" <br/> <linearlayout <br/> Android: Orientation = "vertical" <br/> Android: layout_width = "249px" <br/> Android: layout_height = "wrap_content" <br/> Android: Background = "@ drawable/outgoing" <br/> Android: layout_marginleft = "25px" <br/> <linearlayout <br/> Android: Orientation = "horizontal" <br/> Android: layout_width = "fill_parent" <br/> Android: layout_height = "22dip" <br/> <textview <br/> Android: id = "@ + ID/messagedetail_row_name" <br/> Android: layout_width = "wrap_content" <br/> Android: layout_height = "wrap_content" <br/> Android: textcolor = "#000000" <br/> Android: paddingtop = "2px" <br/> Android: textsize = "16dip" <br/> <textview <br/> Android: Id = "@ + ID/messagedetail_row_date" <br/> Android: layout_width = "wrap_content" <br/> Android: layout_height = "wrap_content" <br/> Android: textcolor = "#000000" <br/> Android: paddingtop = "2px" <br/> Android: textsize = "16dip" <br/> Android: layout_marginleft = "60dip" <br/> </linearlayout> <br/> <textview <br/> Android: id = "@ + ID/messagedetail_row_text" <br/> Android: layout_width = "fill_parent" <br/> Android: layout_height = "wrap_content" <br/> Android: paddingleft = "2px" <br/> Android: textcolor = "# mongodd" <br/> Android: textsize = "16dip" <br/> </linearlayout> <br/> <imageview <br/> Android: layout_width = "42px" <br/> Android: layout_height = "42px" <br/> Android: layout_gravity = "bottom" <br/> Android: id = "@ + ID/messagegedetail_rov_icon" <br/> Android: background = "@ drawable/image2" <br/> </linearlayout> <br/>
Main activity file:
<Br/> Import Java. text. simpledateformat; <br/> Import Java. util. arraylist; <br/> Import Java. util. date; </P> <p> Import android. app. activity; <br/> Import android. OS. bundle; <br/> Import android. view. view; <br/> Import android. view. view. onclicklistener; <br/> Import android. widget. button; <br/> Import android. widget. edittext; <br/> Import android. widget. listview; </P> <p> public class chatactivity extends activi Ty {<br/> private listview talkview; <br/> private button messagebutton; <br/> private edittext messagetext; <br/> private arraylist <chatmsg> List = new arraylist <chatmsg> (); <br/> @ override <br/> Public void oncreate (bundle savedinstancestate) {<br/> super. oncreate (savedinstancestate); <br/> setcontentview (R. layout. main); <br/> system. out. println ("aaaaaaaaaa"); <br/> Init (); <br/>}< br/> private v Oid Init () {<br/> talkview = (listview) findviewbyid (R. id. list); <br/> messagebutton = (button) findviewbyid (R. id. messagebutton); <br/> messagetext = (edittext) findviewbyid (R. id. messagetext); <br/> messagebutton. setonclicklistener (New onclicklistener () {</P> <p> @ override <br/> Public void onclick (view V) {<br/> // todo auto-generated method stub <br/> string name = getname (R. string. mydisplayname); <B R/> string date = getdate (); <br/> string msgtext = gettext (); <br/> int rIDA = R. layout. list_say_me_item; <br/> chatmsg newmsg = new chatmsg (name, date, msgtext, RIDA); <br/> list. add (newmsg); <br/> int ridb = R. layout. list_say_he_item; <br/> string othername = getname (R. string. otherdisplayname); <br/> chatmsg backmsg = new chatmsg (othername, date, "automatic reply (for test !) ", Ridb); <br/> list. add (backmsg); <br/> talkview. setadapter (New chatmsgviewadapter (chatactivity. this, list); <br/> messagetext. settext (""); <br/>}< br/>}); <br/>}< br/> private string getname (int id) {<br/> return getresources (). getstring (ID); <br/>}< br/> private string getdate () {<br/> simpledateformat SDF = new simpledateformat ("mm-dd hh: mm "); <br/> date d = new date (); <br/> return SDF. format (d); <br/>}< br/> private string gettext () {<br/> return messagetext. gettext (). tostring (); <br/>}< br/> @ override <br/> protected void ondestroy () {<br/> // todo auto-generated method stub <br/> super. ondestroy (); <br/>}< br/>}
Adapter:
</P> <p> Import Java. util. arraylist; </P> <p> Import android. content. context; <br/> Import android. database. datasetobserver; <br/> Import android. view. layoutinflater; <br/> Import android. view. view; <br/> Import android. view. viewgroup; <br/> Import android. widget. baseadapter; <br/> Import android. widget. linearlayout; <br/> Import android. widget. textview; </P> <p> public class chatmsgviewadapter extends baseadapter {<br/> Private Static final string tag = chatmsgviewadapter. class. getsimplename (); </P> <p> private arraylist <chatmsg> list; <br/> private context; <br/> Public chatmsgviewadapter (context, arraylist <chatmsg> List) {<br/> This. context = context; <br/> This. list = List; <br/>}< br/> Public Boolean areallitemsenabled () {<br/> return false; <br/>}</P> <p> Public Boolean isenabled (INT arg0) {<br/> return false; <br/>}< br/> @ override <br/> Public int getcount () {<br/> // todo auto-generated method stub <br/> return list. size (); <br/>}</P> <p> @ override <br/> Public object getitem (INT position) {<br/> // todo auto-generated method stub <br/> return list. get (position); <br/>}</P> <p> @ override <br/> Public long getitemid (INT position) {<br/> // todo auto-generated method stub <br/> return position; <br/>}< br/> Public int getitemviewtype (INT position) {<br/> return position; <br/>}< br/> @ override <br/> Public View getview (INT position, view convertview, viewgroup parent) {<br/> chatmsg = List. get (position); <br/> int itemlayout = MSG. getlayoutid (); <br/> linearlayout layout = new linearlayout (context); <br/> layoutinflater Vi = (layoutinflater) context. getsystemservice (context. layout_inflater_service); <br/> VI. inflate (itemlayout, layout, true); <br/> textview tvname = (textview) layout. findviewbyid (R. id. messagedetail_row_name); <br/> tvname. settext (MSG. getname (); <br/> textview tvdate = (textview) layout. findviewbyid (R. id. messagedetail_row_date); <br/> tvdate. settext (MSG. getdate (); <br/> textview tvtext = (textview) layout. findviewbyid (R. id. messagedetail_row_text); <br/> tvtext. settext (MSG. gettext (); <br/> return layout; <br/>}< br/> Public int getviewtypecount () {<br/> return list. size (); <br/>}</P> <p> Public Boolean hasstableids () {<br/> return false; <br/>}</P> <p> Public Boolean isempty () {<br/> return false; <br/>}</P> <p> Public void registerdatasetobserver (datasetobserver observer) {<br/>}</P> <p> Public void unregisterdatasetobserver (datasetobserver observer) {<br/>}< br/>
Chatmsg:</P> <p> public class chatmsg {</P> <p> private string name; <br/> private string date; <br/> private string text; <br/> private int layoutid; <br/> Public chatmsg (string name, string date, string text, int ID) {<br/> This. name = Name; <br/> This. date = date; <br/> This. TEXT = text; <br/> This. layoutid = ID; <br/>}< br/> Public String getname () {<br/> return name; <br/>}< br/> Public void setname (string name) {<br/> This. name = Name; <br/>}< br/> Public String getdate () {<br/> return date; <br/>}< br/> Public void setdate (string date) {<br/> This. date = date; <br/>}< br/> Public String gettext () {<br/> return text; <br/>}< br/> Public void settext (string text) {<br/> This. TEXT = text; <br/>}< br/> Public int getlayoutid () {<br/> return layoutid; <br/>}< br/> Public void setlayoutid (INT layoutid) {<br/> This. layoutid = layoutid; <br/>}</P> <p >}< br/>
It only shows the effect. If you like it, you can get a socket chat and try it ~