多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > php開(kāi)源 > 綜合技術(shù) > 【安卓筆記】氣泡式ListView

【安卓筆記】氣泡式ListView

來(lái)源:程序員人生   發(fā)布時(shí)間:2014-12-16 08:34:59 閱讀次數(shù):3341次

實(shí)現(xiàn)效果:


要想實(shí)現(xiàn)這個(gè)效果,我們需要找到氣泡背景的9.png圖片,大家可以從qq微信等apk包中提取。

實(shí)現(xiàn)步驟:

1.編寫(xiě)布局文件。

每一個(gè)條目的布局
activity_chat_singlemessage.xml
<?xml version="1.0" encoding="utf⑻"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" > <LinearLayout android:id="@+id/singleMessageContainer" android:layout_width="fill_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/singleMessage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="5dip" android:background="@drawable/bubble_b" android:paddingLeft="10dip" android:textSize="18sp" android:text="Hello bubbles!" android:textColor="@android:color/primary_text_light" /> </LinearLayout> </LinearLayout>
界面布局:
activity_main.xml
<?xml version="1.0" encoding="utf⑻"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ListView android:id="@+id/listView1" android:divider="@null" android:listSelector="@android:color/transparent" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="80dp" > </ListView> <RelativeLayout android:id="@+id/form" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:orientation="vertical" > <EditText android:id="@+id/chatText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_toLeftOf="@+id/buttonSend" android:ems="10" android:inputType="textMultiLine" /> <Button android:id="@+id/buttonSend" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/chatText" android:layout_alignParentEnd="true" android:layout_alignParentRight="true" android:text="Send" /> </RelativeLayout> </RelativeLayout>
2.編寫(xiě)業(yè)務(wù)數(shù)據(jù)類(lèi):

package com.example.chatbubble; public class ChatMessage {//代表每條消息 public boolean left;//是不是在左側(cè) public String message; public ChatMessage(boolean left, String message) { super(); this.left = left; this.message = message; } }

3.編寫(xiě)適配器類(lèi)
package com.example.chatbubble; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.view.Gravity; 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 ChatArrayAdapter extends ArrayAdapter<ChatMessage> { private TextView chatText; private LinearLayout container; private List<ChatMessage> chatData = new ArrayList<>(); @Override public void add(ChatMessage object) { chatData.add(object); super.add(object); } @Override public int getCount() { return chatData.size(); } @Override public ChatMessage getItem(int position) { return chatData.get(position); } @Override public View getView(int position, View convertView, ViewGroup parent) { if(convertView == null) { LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.activity_chat_singlemessage,parent, false); } chatText = (TextView) convertView.findViewById(R.id.singleMessage); container = (LinearLayout) convertView.findViewById(R.id.singleMessageContainer); ChatMessage msg = getItem(position); chatText.setText(msg.message); /*根據(jù)msg的內(nèi)部left標(biāo)識(shí)來(lái)判定應(yīng)當(dāng)選擇甚么背景,和位置(左/右)*/ chatText.setBackgroundResource(msg.left ? R.drawable.bubble_b : R.drawable.bubble_a); container.setGravity(msg.left ? Gravity.LEFT : Gravity.RIGHT); return convertView; } public ChatArrayAdapter(Context context, int resource) { super(context, resource); } }
4.編寫(xiě)主界面的代碼:
package com.example.chatbubble; import android.app.Activity; import android.database.DataSetObserver; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.AbsListView; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; public class MainActivity extends Activity { private ListView lv; private Button but; private EditText et; private ChatArrayAdapter adapter; private boolean side = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv = (ListView) findViewById(R.id.listView1); but = (Button) findViewById(R.id.buttonSend); et = (EditText) findViewById(R.id.chatText); adapter = new ChatArrayAdapter(this, R.layout.activity_chat_singlemessage); lv.setAdapter(adapter); but.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { sendChatMessage();//發(fā)送消息 } }); lv.setTranscriptMode(AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL); //注冊(cè)視察者,數(shù)據(jù)改變時(shí)滑到底部 adapter.registerDataSetObserver(new DataSetObserver() { @Override public void onChanged() { super.onChanged(); lv.setSelection(adapter.getCount() - 1); } }); } private boolean sendChatMessage() { /*add方法內(nèi)部會(huì)調(diào)用notifyDataSetChanged方法,故我們不需要手動(dòng)調(diào)用!*/ adapter.add(new ChatMessage(side, et.getText().toString())); /*清空數(shù)據(jù)*/ et.setText(""); side = !side; return true; } }

效果完成!

源碼地址:https://github.com/Rowandjj/BubbleStyleListViewDemo






生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 最近免费字幕中文大全视频 | 国产美女无遮挡免费网站 | 日本特黄视频 | 久久久精品久久久久久 | 日本在线资源 | 亚洲一区二区三区免费 | 精品国产欧美另类一区 | 一级特黄aa毛片免费观看 | 亚洲精品一区二区三区婷婷月 | 自拍偷拍网 | 国产精品新婚门 | 亚洲图片另类 | 欧美一级毛片免费观看 | 高清国产一区二区三区 | 动漫毛片网站 | 亚洲综合在线观看视频 | 韩日一区二区 | 最近中文字幕免费mv视频 | 欧美性色黄大片www喷水 | 国产亚洲欧美一区 | 黑人猛干| 大黑人xxx| 亚洲一区二区三区四区视频 | 欧美午夜毛片a级在线 | 一区二区不卡在线 | 亚洲国产第一页 | 国产午夜精品理论片久久影视 | 亚洲综合久久综合激情久久 | a毛片在线播放 | 一区二区三区免费视频网站 | 亚洲一区二区三 | 日本在线中文 | 92看片淫黄大片看国产片 | 久久精品一区二区国产 | 另类黄色 | 美国毛片免费观看 | 一级看片免费视频 | 国产精品亚洲综合第一区 | 亚洲一区二区免费看 | 国产精品成人观看视频国产 | 日韩高清无砖砖区2022 |