iphone中短信聊天都是那种气泡式的,当然,android短信也是,
那么我们如何实现这种效果呢?
我下面就简单的实现了一个demo,
其实就是一个listview,然后对adapter中getview的时候,根据自己的设定来获取不同的layout。
具体看代码:
public class MainActivity extends Activity { private ListView talkView; private ArrayList<DetailEntity> list = null; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); talkView = (ListView)findViewById(R.id.list); list = new ArrayList<DetailEntity>(); DetailEntity d1 = new DetailEntity("Me","2012-04-26","Hello!",R.layout.list_say_me_item); list.add(d1); DetailEntity d2 = new DetailEntity("You","2012-04-26","Hi!",R.layout.list_say_he_item); list.add(d2); DetailEntity d3 = new DetailEntity("Me","2012-04-26","Waht is your name?",R.layout.list_say_he_item); list.add(d3); DetailEntity d4 = new DetailEntity("You","2012-04-26","****!",R.layout.list_say_me_item); list.add(d4); talkView.setAdapter(new DetailAdapter(MainActivity.this, list)); }}
然后是adapter了
public class DetailAdapter implements ListAdapter { private ArrayList<DetailEntity> coll; private Context ctx; public DetailAdapter(Context context, ArrayList<DetailEntity> coll) { ctx = context; this.coll = coll; } public boolean areAllItemsEnabled() { return false; } public boolean isEnabled(int arg0) { return false; } public int getCount() { return coll.size(); } public Object getItem(int position) { return coll.get(position); } public long getItemId(int position) { return position; } public int getItemViewType(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { [color=red]DetailEntity entity = coll.get(position); int itemLayout = entity.getLayoutID();[/color] LinearLayout layout = new LinearLayout(ctx); LayoutInflater vi = (LayoutInflater) ctx .getSystemService(Context.LAYOUT_INFLATER_SERVICE); vi.inflate(itemLayout, layout, true); TextView tvName = (TextView) layout .findViewById(R.id.messagedetail_row_name); tvName.setText(entity.getName()); TextView tvDate = (TextView) layout .findViewById(R.id.messagedetail_row_date); tvDate.setText(entity.getDate()); TextView tvText = (TextView) layout .findViewById(R.id.messagedetail_row_text); tvText.setText(entity.getText()); return layout; } public int getViewTypeCount() { return coll.size(); } public boolean hasStableIds() { return false; } public boolean isEmpty() { return false; } public void registerDataSetObserver(DataSetObserver observer) { } public void unregisterDataSetObserver(DataSetObserver observer) { }}
注意红色部分,获取到相应的layout。
就实现了气泡式的效果了。
效果图:

具体代码见附件。