簡易版聊天介面
来源:互联网 发布:宇宙骑士 知乎 编辑:程序博客网 时间:2024/06/10 04:48
定義聊天記錄佈局 msg_item.xml:
<?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:orientation="vertical" android:padding="10dp"> <LinearLayout android:id="@+id/left_layout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="left" android:background="@drawable/message_left" > <TextView android:id="@+id/left_msg" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:textColor="#fff"/> </LinearLayout> <LinearLayout android:id="@+id/right_layout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" android:background="@drawable/message_right" > <TextView android:id="@+id/rigth_msg" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:textColor="#fff"/> </LinearLayout></LinearLayout>
分別包含接收記錄(left_msg)以及發送記錄(right_msg)以及各自的背景圖片
定義主佈局 main_activity.xml:
<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="match_parent" android:background="#d8e0e8" android:orientation="vertical" > <ListView android:id="@+id/msg_list_view" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:divider="#0000"> </ListView> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <EditText android:id="@+id/input_text" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:hint="Type somthing here" android:maxLines="2" /> <Button android:id="@+id/send" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Send" /> </LinearLayout></LinearLayout>
定義一個ListView 、輸入文本框以及發送按鈕
定義Msg類:
package com.example.uibestpractive;public class Msg { private String content; //消息的內容 private int type; //消息的類型 public static final int TYPE_RECEIVED = 0; //接收信息 public static final int TYPE_SEND = 1; //發送信息 public Msg (String content,int type){ this.content = content; this.type = type; } public String getContent() { return content; } public int getType() { return type; }}
content 表示消息的內容,type表示消息的類型,消息的類型包含:TYPE_RECEIVED、TYPE_SEND。
創建ListView適配類,MsgAdapter:
package com.example.uibestpractive;import java.util.List;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.LinearLayout;import android.widget.TextView;public class MsgAdapter extends ArrayAdapter<Msg>{ private int resourceId; public MsgAdapter(Context context, int textViewResourceId, List<Msg> objects) { super(context, textViewResourceId, objects); // TODO Auto-generated constructor stub resourceId = textViewResourceId; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub Msg msg = getItem(position); View view ; ViewHolder viewHolder = null; if(convertView == null){ view = LayoutInflater.from(getContext()).inflate(resourceId, null); viewHolder = new ViewHolder(); viewHolder.leftLayout = (LinearLayout)view.findViewById(R.id.left_layout); viewHolder.rightLayout = (LinearLayout)view.findViewById(R.id.right_layout); viewHolder.leftMsg = (TextView)view.findViewById(R.id.left_msg); viewHolder.rightMsg = (TextView)view.findViewById(R.id.rigth_msg); view.setTag(viewHolder); }else{ view = convertView; viewHolder = (ViewHolder)view.getTag(); } if(msg.getType() == msg.TYPE_RECEIVED){ //如果是接收的信息,則顯示左邊的消息佈局,將右邊的消息佈局隱藏 viewHolder.leftLayout.setVisibility(View.VISIBLE); viewHolder.rightLayout.setVisibility(View.GONE); viewHolder.leftMsg.setText(msg.getContent()); }else if (msg.getType() == msg.TYPE_SEND){//如果是發送的信息,則顯示左邊的消息佈局,將右邊的消息佈局隱藏 viewHolder.rightLayout.setVisibility(View.VISIBLE); viewHolder.leftLayout.setVisibility(View.GONE); viewHolder.rightMsg.setText(msg.getContent()); } return view ; } class ViewHolder{ LinearLayout leftLayout; LinearLayout rightLayout; TextView leftMsg; TextView rightMsg; }}
在getView()方法中,通過消息的類型判斷 如果是收到的消息,則顯示左邊的消息佈局,如果是發送的消息,則顯示右邊的消息佈局。
MainActivity類:
package com.example.uibestpractive;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.ListView;public class MainActivity extends Activity implements OnClickListener{ private ListView msgListView; private Button send; private EditText inputText; private MsgAdapter adapter; private List<Msg> msgList = new ArrayList<Msg>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initMsgs(); adapter = new MsgAdapter(MainActivity.this, R.layout.msg_item, msgList); send = (Button)findViewById(R.id.send); inputText = (EditText)findViewById(R.id.input_text); msgListView = (ListView)findViewById(R.id.msg_list_view); msgListView.setAdapter(adapter); send.setOnClickListener(this); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.quit) { finish(); } return super.onOptionsItemSelected(item); } private void initMsgs(){ Msg mgs1 = new Msg("hello guy", Msg.TYPE_RECEIVED); msgList.add(mgs1); Msg mgs2 = new Msg("hello, who is that ?", Msg.TYPE_SEND); msgList.add(mgs2); Msg msg3 = new Msg("This is tom.nick talking for you ",Msg.TYPE_RECEIVED); msgList.add(msg3); } @Override public void onClick(View v) { // TODO Auto-generated method stub String content = inputText.getText().toString(); if(! "".equals(content)){ Msg msg = new Msg(content, Msg.TYPE_SEND); msgList.add(msg); adapter.notifyDataSetChanged(); //當有新消息時,刷新ListView 中的顯示 msgListView.setSelection(msgList.size()); //將ListView定位到最後一行 inputText.setText(""); } }}
當有信息發出時,如果content不為空,則創建一個新的Msg對象,並把它添加到msgList中,又調用notifyDataSetChanged()方法通知列表發生了變化,新增的消息才能在ListView中顯示,然後再調用setSelection()方法將顯示的數據定位在最後一行。
0 0
- 簡易版聊天介面
- XP介面
- SQL介面
- Java最簡單介面
- Vista 與輸入法程式介面
- Vista 與輸入法程式介面
- Vista 與輸入法程式介面
- Vista 與輸入法程式介面
- Vista 與輸入法程式介面
- Vista 與輸入法程式介面
- Vista 與輸入法程式介面
- Vista 與輸入法程式介面
- Vista 與輸入法程式介面
- Vista 與輸入法程式介面
- Vista 與輸入法程式介面
- Vista 與輸入法程式介面
- Vista 與輸入法程式介面
- Vista 與輸入法程式介面
- 数据结构_P3
- 一建信息
- 配置文件——AppSettings VS ConnectionStrings
- windows下android打包工具
- Android 百度map频繁添加覆盖物后刷新出现map闪烁有关问题
- 簡易版聊天介面
- ABAP字符串处理
- Java集合类框架—List、ArrayList、LinkedList
- centos下挂载HFS+格式移动硬盘
- Json介绍及其优缺点
- Hbase教程(一) Hbase入门教程
- webuploader设置timeout
- BP神经网络
- CI框架记录