zoukankan      html  css  js  c++  java
  • android 实现qq聊天对话界面效果

     效果图:



    chatting_item_from.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <LinearLayout
     android:orientation="vertical"
     android:paddingLeft="6.0dip"
     android:paddingRight="6.0dip"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
       xmlns:android="http://schemas.android.com/apk/res/android">
        <TextView
         android:id="@+id/chatting_time_tv"
         style="@style/ChattingUISplit" />
       
          <TextView
         android:id="@+id/chatting_content_itv"
         android:
         android:background="@drawable/chatfrom_bg"
         style="@style/ChattingUIText" />
    </LinearLayout>

    chatting_item_to.xml:

     

    <?xml version="1.0" encoding="UTF-8"?>
    <LinearLayout android:orientation="vertical" android:paddingLeft="6.0dip" android:paddingRight="6.0dip" android:layout_width="fill_parent" android:layout_height="wrap_content"
      xmlns:android="http://schemas.android.com/apk/res/android">
        <TextView
         android:id="@+id/chatting_time_tv"
         style="@style/ChattingUISplit" />
        <LinearLayout
         android:orientation="horizontal"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content">
            <TextView
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_weight="1.0" />
            <ImageView
             android:id="@+id/chatting_state_iv"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content" />
              <TextView
             android:
             android:id="@+id/chatting_content_itv"
             android:background="@drawable/chatto_bg"
             style="@style/ChattingUIText" />
        </LinearLayout>
    </LinearLayout>

     

    chatting_title_bar.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
      android:layout_height="40dip" 
        android:orientation="horizontal"
        android:gravity="center_vertical"
     android:background="@drawable/mmtitle_bg">
     <TextView
      android:id="@+id/chatting_contact_name"
      android:layout_height="wrap_content"
      android:layout_width="180dip"
      android:textSize="18sp"
      android:ellipsize="end"
      android:background="@null"
      android:textColor="@color/white"
      android:gravity="left|center"
      android:paddingLeft="10dip"  
      android:text="测试用户"
     />
     <TextView
      android:id="@+id/chatting_contact_status"
      android:layout_height="wrap_content"
      android:layout_width="wrap_content"
      android:background="@null"
      android:text="正在输入..."
      android:textSize="16sp"
      android:textColor="@color/white"
      android:layout_alignParentRight="true"
      android:layout_alignParentBottom="true"
      android:padding="3dip"
      android:layout_toRightOf="@id/chatting_contact_name"
      android:visibility="gone"
     />
     
    </RelativeLayout>

    chatting.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <LinearLayout
     android:id="@+id/chat_root"
     android:focusable="false"
     android:focusableInTouchMode="false"
     android:background="@drawable/nav_page"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:gravity="center_horizontal"
     android:orientation="vertical"
       xmlns:android="http://schemas.android.com/apk/res/android">
        <ListView
         android:id="@+id/chatting_history_lv"
         android:background="@null"
         android:scrollbars="vertical"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:listSelector="@drawable/mm_chat_listitem"
         android:transcriptMode="alwaysScroll"
         android:cacheColorHint="#00000000"
         android:divider="@null"
         android:layout_weight="1.0" />
       <LinearLayout
         android:orientation="horizontal"
         android:background="@drawable/txt_msg_bg"
         android:paddingRight="7.0dip"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content">
            <ImageView
             android:layout_gravity="center_vertical"
             android:id="@+id/sms_button_insert"
             android:paddingLeft="15.0dip"
             android:paddingTop="5.0dip"
             android:paddingRight="7.0dip"
             android:paddingBottom="5.0dip"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:src="@drawable/sms_insert" />
            <EditText
             android:textColorHint="@color/search_hint"
             android:layout_gravity="center_vertical"
             android:id="@+id/text_editor"
             android:background="@drawable/sms_embeded_text_editor_bg"
             android:focusable="true"
             android:nextFocusRight="@+id/send_button"
             android:layout_width="0.0dip"
             android:layout_height="wrap_content"
             android:layout_marginLeft="7.0dip"
             android:layout_marginTop="5.0dip"
             android:layout_marginRight="7.0dip"
             android:layout_marginBottom="5.0dip"
             android:minHeight="34.0dip"
             android:hint="输入消息"
             android:maxLines="8"
             android:maxLength="2000"
             android:capitalize="sentences"
             android:
             android:layout_weight="1.0"
             android:inputType="textCapSentences|textAutoCorrect|textMultiLine|textShortMessage"
             android:imeOptions="actionSend|flagNoEnterAction" />
            <Button
             android:gravity="center"
             android:layout_gravity="center_vertical"
             android:id="@+id/send_button"
             android:background="@drawable/sms_send_button_bg"
             android:paddingLeft="11.0dip"
             android:paddingRight="11.0dip"
             android:nextFocusLeft="@id/text_editor"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             />
         </LinearLayout>
    </LinearLayout>

     

    实体类:

    public class ChatMessage {

     public static final int MESSAGE_FROM = 0;
     public static final int MESSAGE_TO = 1;

     private int direction;
     private String content;

     public ChatMessage(int direction, String content) {
      super();
      this.direction = direction;
      this.content = content;
     }

     public int getDirection() {
      return direction;
     }

     public void setDirection(int direction) {
      this.direction = direction;
     }

     public void setContent(String content) {
      this.content = content;
     }

     public CharSequence getContent() {
      return content;
     }

    }

     

    adapter类:

    import java.util.List;

    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.TextView;

    public class ChattingAdapter extends BaseAdapter {
     protected static final String TAG = "ChattingAdapter";
     private Context context;

     private List<ChatMessage> chatMessages;

     public ChattingAdapter(Context context, List<ChatMessage> messages) {
      super();
      this.context = context;
      this.chatMessages = messages;

     }

     public int getCount() {
      return chatMessages.size();
     }

     public Object getItem(int position) {
      return chatMessages.get(position);
     }

     public long getItemId(int position) {
      return position;
     }

     public View getView(int position, View convertView, ViewGroup parent) {
      ViewHolder holder = null;
      ChatMessage message = chatMessages.get(position);
      if (convertView == null || (holder = (ViewHolder) convertView.getTag()).flag != message.getDirection()) {

       holder = new ViewHolder();
       if (message.getDirection() == ChatMessage.MESSAGE_FROM) {
        holder.flag = ChatMessage.MESSAGE_FROM;

        convertView = LayoutInflater.from(context).inflate(R.layout.chatting_item_from, null);
       } else {
        holder.flag = ChatMessage.MESSAGE_TO;
        convertView = LayoutInflater.from(context).inflate(R.layout.chatting_item_to, null);
       }

       holder.text = (TextView) convertView.findViewById(R.id.chatting_content_itv);
       convertView.setTag(holder);
      }
      holder.text.setText(message.getContent());

      return convertView;
     }
    //优化listview的Adapter
     static class ViewHolder {
      TextView text;
      int flag;
     }

    }

     

    主activity类
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.Window;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ListView;

    public class MainActivity extends Activity {
     protected static final String TAG = "MainActivity";
     private ChattingAdapter chatHistoryAdapter;
     private List<ChatMessage> messages = new ArrayList<ChatMessage>();

     private ListView chatHistoryLv;
     private Button sendBtn;
     private EditText textEditor;
     //private ImageView sendImageIv;
     //private ImageView captureImageIv;
     //private View recording;
     //private PopupWindow menuWindow = null;

     @Override
     public void onCreate(Bundle savedInstanceState) {
      requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
      super.onCreate(savedInstanceState);
      setContentView(R.layout.chatting);
      getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.chatting_title_bar);
      chatHistoryLv = (ListView) findViewById(R.id.chatting_history_lv);
      setAdapterForThis();
      sendBtn = (Button) findViewById(R.id.send_button);
      textEditor = (EditText) findViewById(R.id.text_editor);
      
      sendBtn.setOnClickListener(l);
      
      
      

     }

     // 设置adapter
     private void setAdapterForThis() {
      initMessages();
      chatHistoryAdapter = new ChattingAdapter(this, messages);
      chatHistoryLv.setAdapter(chatHistoryAdapter);
     }

     // 为listView添加数据
     private void initMessages() {
      messages.add(new ChatMessage(ChatMessage.MESSAGE_FROM, "hello"));
      messages.add(new ChatMessage(ChatMessage.MESSAGE_TO, "hello"));
      messages.add(new ChatMessage(ChatMessage.MESSAGE_FROM, "你好吗?"));
      messages.add(new ChatMessage(ChatMessage.MESSAGE_TO, "非常好!"));
      messages.add(new ChatMessage(ChatMessage.MESSAGE_FROM, "欢迎光临我的博客,http://hi.csdn.net/lyfi01"));
      messages.add(new ChatMessage(ChatMessage.MESSAGE_TO, "恩,好的,谢谢"));
     }

     
     private View.OnClickListener l = new View.OnClickListener() {

      public void onClick(View v) {

       if (v.getId() == sendBtn.getId()) {
        String str = textEditor.getText().toString();
        String sendStr;
        if (str != null
          && (sendStr = str.trim().replaceAll(" ", "").replaceAll(" ", "").replaceAll(" ", "")
            .replaceAll("f", "")) != "") {
         sendMessage(sendStr);

        }
        textEditor.setText("");

       }
      }

      // 模拟发送消息
      private void sendMessage(String sendStr) {
       messages.add(new ChatMessage(ChatMessage.MESSAGE_TO, sendStr));
       chatHistoryAdapter.notifyDataSetChanged();
      }

     };
    }

     

    转自:http://blog.sina.com.cn/s/blog_80723de80100vnxg.html

  • 相关阅读:
    git使用
    onethink常用标签的使用示例
    thinkphp中 select() 和find() 方法的区别
    CSS3Ps -Photoshop图层特效转CSS3代码
    普通公司网站代码片段合辑
    IE hack大全
    PHP四种基础算法详解:冒泡,选择,插入和快速排序法
    PHP编程效率的20个要点
    php实现AES/CBC/PKCS5Padding加密解密(又叫:对称加密)
    浏览器桌面提醒,适用于网站“新消息提醒”
  • 原文地址:https://www.cnblogs.com/lixiaolun/p/3474532.html
Copyright © 2011-2022 走看看