- 功能:仿制聊天界面,实现发送消息
- 实现:制作点9图作为气泡背景图片,ListView显示消息,判断消息类别(发送/收到)显示相应的item布局。
1)制作.9图
- 理解nine——patch(.9.png)
.9.png是Android中一种特殊的png格式的图片,可以指定图片特定位置拉伸以及填充内容的位置。利用.9.png可以使图片在特定区域拉伸时不会失真。 - 制作.9.png格式的气泡图片
将背景图片放到res-drawable中,右键选择create 9-patch file。在.png图片四周增加了一个像素点的空白像素,通过在该空白像素区域内绘制黑点来指定特殊区域。
左边线条:纵向拉伸区域。
上边线条:横向拉伸区域。
右边线条:填充内容纵向显示区域。
下边线条:填充内容横向显示区域。
2)判别消息类型,显示相应布局
1.item.xml
//接收到的消息布局
<LinearLayout
android:id="@+id/left_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:background="@drawable/left"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="10dp"
android:id="@+id/left_tv"
android:textColor="#787878"/>
</LinearLayout>
//发送的消息布局
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/right_layout"
android:background="@drawable/right"
android:layout_gravity="right">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:id="@+id/right_tv"
android:layout_margin="10dp"
android:textColor="#000"/>
</LinearLayout>
2.为消息设置type,区分收到的和发送的消息。通过setVisibility()方法显示相应的布局。
if(msg.getType() == msg.TYPE_RECEIVED){
viewHolder.leftLyaout.setVisibility(View.VISIBLE);
viewHolder.rightLayout.setVisibility(View.GONE);
viewHolder.left_tv.setText(msg.getStr());
}else if(msg.getType() == msg.TYPE_SENT){
viewHolder.rightLayout.setVisibility(View.VISIBLE);
viewHolder.leftLyaout.setVisibility(View.GONE);
viewHolder.right_tv.setText(msg.getStr());
}