android学习笔记30--------------聊天式对话效果

本文介绍了一个简单的聊天应用UI实现方案,包括自定义消息布局、消息适配器等关键部分。通过示例代码展示了如何在Android平台上创建聊天界面,并实现基本的消息发送及显示功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载请注明原文出处:http://blog.youkuaiyun.com/yf210yf

这几天看了些聊天式对话效果,自己修改了一番。


public class ChatActivity extends Activity
{
	private ListView talkView;
	private Button messageButton;
	private EditText messageText;
	private ArrayList<ChatMessage> list = new ArrayList<ChatMessage>();

	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		init();
	}

	private void init()
	{
		talkView = (ListView) findViewById(R.id.list);
		messageButton = (Button) findViewById(R.id.MessageButton);
		messageText = (EditText) findViewById(R.id.MessageText);
		messageButton.setOnClickListener(new OnClickListener()
		{

			@Override
			public void onClick(View v)
			{
				String date = getDate();
				String msgText = getText();
				int RIdA = R.layout.chatting_item_from;
				ChatMessage newMsg = new ChatMessage( date, msgText, RIdA);
				
				list.add(newMsg);
				int RIdB = R.layout.chatting_item_to;

				ChatMessage backMsg = new ChatMessage(date,
						"自动回复(for test!)", RIdB);
				list.add(backMsg);
				talkView
						.setAdapter(new ChattingAdapter(ChatActivity.this, list));
				messageText.setText("");
			}
		});
	}

	private String getDate()
	{
		SimpleDateFormat sdf = new SimpleDateFormat("MM-dd HH:mm");
		Date d = new Date();
		return sdf.format(d);
	}

	private String getText()
	{
		return messageText.getText().toString();
	}

}

public class ChatMessage
{

	private String date;
	private String text;
	private int layoutID;

	public ChatMessage(String date, String text, int id)
	{
		this.date = date;
		this.text = text;
		this.layoutID = id;
	}

	public String getDate()
	{
		return date;
	}

	public void setDate(String date)
	{
		this.date = date;
	}

	public String getText()
	{
		return text;
	}

	public void setText(String text)
	{
		this.text = text;
	}

	public int getLayoutID()
	{
		return layoutID;
	}

	public void setLayoutID(int layoutID)
	{
		this.layoutID = layoutID;
	}

}

public class ChattingAdapter extends BaseAdapter
{
	//private static final String TAG = ChattingAdapter.class.getSimpleName();

	private ArrayList<ChatMessage> list;
	private Context context;

	public ChattingAdapter(Context context, ArrayList<ChatMessage> list)
	{
		this.context = context;
		this.list = list;
	}

	public boolean areAllItemsEnabled()
	{
		return false;
	}

	public boolean isEnabled(int arg0)
	{
		return false;
	}

	@Override
	public int getCount()
	{
		// TODO Auto-generated method stub
		return list.size();
	}

	@Override
	public Object getItem(int position)
	{
		// TODO Auto-generated method stub
		return list.get(position);
	}

	@Override
	public long getItemId(int position)
	{
		// TODO Auto-generated method stub
		return position;
	}

	public int getItemViewType(int position)
	{
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent)
	{
		ChatMessage msg = list.get(position);
		int itemlayout = msg.getLayoutID();
		LinearLayout layout = new LinearLayout(context);
		LayoutInflater vi = (LayoutInflater) context
				.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		vi.inflate(itemlayout, layout, true);
		
		
		TextView tvDate = (TextView) layout
				.findViewById(R.id.messagedetail_row_date);
		
		tvDate.setText(msg.getDate());
		
		TextView tvText = (TextView) layout
				.findViewById(R.id.messagedetail_row_text);
		
		tvText.setText(msg.getText());
		return layout;
	}

	public int getViewTypeCount()
	{
		return list.size();
	}

	public boolean hasStableIds()
	{
		return false;
	}

	public boolean isEmpty()
	{
		return false;
	}

	public void registerDataSetObserver(DataSetObserver observer)
	{
	}

	public void unregisterDataSetObserver(DataSetObserver observer)
	{
	}

}

<?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">
   
 <LinearLayout  
      android:orientation="vertical"  
      android:layout_width="wrap_content"  
      android:layout_height="wrap_content"  
      android:background="@drawable/chatto"  
      android:layout_marginLeft="25px"
      android:layout_gravity="right">      

 		  <TextView  
          	android:id="@+id/messagedetail_row_text"  
          	android:layout_width="wrap_content"  
          	android:layout_height="wrap_content"  
         	android:paddingLeft="2px"  
          	android:textColor="#0000DD"  
         	android:textSize="16dip"  
      		android:layout_gravity="left"/>  
 
          <TextView  
              android:id="@+id/messagedetail_row_date"  
              android:layout_width="wrap_content"  
              android:layout_height="wrap_content"  
              android:textColor="#000000"  
              android:paddingTop="2px"  
              android:textSize="12dip"  
              android:layout_marginLeft="60dip"
              android:layout_gravity="right"/>  
      
  </LinearLayout>  

</LinearLayout>

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout 
	xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
  	
    <LinearLayout  
      android:orientation="vertical"  
      android:layout_width="wrap_content"  
      android:layout_height="wrap_content"  
      android:background="@drawable/chatfrom"  
      android:layout_marginLeft="5dp"
      android:layout_gravity="left">      
                
          <TextView  
         	 android:id="@+id/messagedetail_row_text"  
          	 android:layout_width="wrap_content"  
         	 android:layout_height="wrap_content"  
         	 android:paddingLeft="2px"  
         	 android:textColor="#0000DD"  
         	 android:textSize="16dip"
         	 android:layout_gravity="left"/>
           
          <TextView  
              android:id="@+id/messagedetail_row_date"  
              android:layout_width="wrap_content"  
              android:layout_height="wrap_content"  
              android:textColor="#000000"  
              android:paddingTop="2px"  
              android:textSize="12dip"  
              android:layout_marginLeft="60dip"  
              android:layout_gravity="right"/>  
                            	 
          </LinearLayout>                
  
</LinearLayout>

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
	xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    
    <RelativeLayout 
    	android:layout_height="wrap_content" 
    	android:layout_width="wrap_content" 
    	android:id="@+id/linearLayout1">
    	
    <ListView 
    	android:id="@+id/list" 
    	android:layout_width="fill_parent" 
    	android:layout_height="380px"
    	android:scrollbars="none"
    	></ListView>
    	 	
    	 	
    	<EditText 
    	android:id="@+id/MessageText" 
    	android:layout_height="wrap_content"     	
    	android:layout_width="wrap_content"
    	android:hint="点击输入信息:"
    	    	
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignRight="@+id/nulltext"    	
    	></EditText>
    	
    	<TextView
    		android:id="@+id/nulltext" 
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        
	        android:layout_below="@+id/list"
	        android:layout_toLeftOf ="@+id/MessageButton"          	        
	        ></TextView>
    	
       <Button 
         android:id="@+id/MessageButton" 
    	 android:text="发送" 
    	 android:layout_width="wrap_content" 
    	 android:layout_height="wrap_content"
    	 
    	 android:layout_below="@+id/list"
    	 android:layout_alignTop="@+id/nulltext"
    	 android:layout_alignParentRight="true"
    	
    	></Button>  	 	
    </RelativeLayout>
    
   
    
    
</LinearLayout>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值