android-對話式聊天效果實現

來源:互聯網
上載者:User
使用android的簡訊息軟體如有米簡訊,等,都有對話式的聊天效果,個人感覺挺好的,現在簡單模仿實現下。
效果如下:

為了實現這種效果,需要弄兩個不同的xml布局檔案

我: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 /> ><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 /> /><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 /> ><br /> <LinearLayout<br /> android:orientation="horizontal"<br /> android:layout_width="fill_parent"<br /> android:layout_height="22dip"<br /> ><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 /> /><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 /> /><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="#0000DD"<br /> android:textSize="16dip"<br /> /><br /> </LinearLayout><br /></LinearLayout><br />
對方: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 /> ><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 /> ><br /> <LinearLayout<br /> android:orientation="horizontal"<br /> android:layout_width="fill_parent"<br /> android:layout_height="22dip"<br /> ><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 /> /><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 /> /><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="#0000DD"<br /> android:textSize="16dip"<br /> /><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 /> /><br /></LinearLayout><br />

主Activity檔案:

<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 Activity {<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 void 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);<br />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,"自動回複(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 context;<br />public ChatMsgViewAdapter(Context 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 msg = 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 />}<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 />

只是個效果顯示,喜歡的朋友可以弄個socket聊天試試,O(∩_∩)O哈哈~

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.