自定義Notification 聊天界面的編寫

自定義Notification

書接上一篇的Notification

case R.id.button3:
                RemoteViews rv = new RemoteViews(getPackageName(),R.layout.notification_test);
                Intent intent2 = new Intent(getApplicationContext(),MainActivity.class);
                PendingIntent pend2 = PendingIntent.getActivity(getApplicationContext(),1,intent2,PendingIntent.FLAG_ONE_SHOT);//設置pendingintent的使
                Notification notification2 = new Notification.Builder(MainActivity.this).setSmallIcon(R.mipmap.ic_launcher)
                        .setTicker("新短消息").setContentTitle("標題").setContentText("文本").setContentInfo("內容").setContentIntent(pend2)
                        .setAutoCancel(true).setWhen(System.currentTimeMillis()).setContent(rv).build();
                mNotificationManager.notify(2,notification2);
                break;

聊天界面

MVC設計模式,活動、adapter、model分開

public class MainActivity extends Activity implements View.OnClickListener{
    private EditText mEditTextContent;
    private ImageView mImageView;
    private Html.ImageGetter mImageGetter;
    private List<ChatMessage> mData;
    private ListView mListView;
    private Button mButtonSendLeft;
    private MessageAdapter mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mEditTextContent = (EditText) findViewById(R.id.edittext);
        mImageView = (ImageView) findViewById(R.id.imageview);
        mButtonSendLeft = (Button) findViewById(R.id.button_left);
        mListView = (ListView) findViewById(R.id.listview);
        mImageView.setOnClickListener(this);
        mButtonSendLeft.setOnClickListener(this);
        mImageGetter = new Html.ImageGetter() {
            @Override
            public Drawable getDrawable(String s) {
                Drawable drawable = getResources().getDrawable(R.mipmap.ecj);
                drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());
                return drawable;
            }
        };
        mData = new ArrayList<>();
        mAdapter = new MessageAdapter(getLayoutInflater(),mData,mImageGetter);
        mListView.setAdapter(mAdapter);
    }
    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.imageview:
                Spanned spanned = Html.fromHtml("<img src=''/>",mImageGetter,null);
                //mEditTextContent.getSelectionStart()輸入框的光標位置
                mEditTextContent.getText().insert(mEditTextContent.getSelectionStart(),spanned);//將表情插入到光標位置
                break;
            case R.id.button_left:
                ChatMessage message = new ChatMessage();
                message.setImageHead(R.mipmap.ic_launcher);
                message.setTitle("營長");
                message.setNickname("小明");
                message.setTime(System.currentTimeMillis());
                message.setTextMessage(filterHtml(Html.toHtml(mEditTextContent.getText())));
                Log.d("設置的內容",Html.toHtml(mEditTextContent.getText()));
                mData.add(message);//將生成的信息添加到mData中去
                mAdapter.notifyDataSetChanged();//刷新listview
                mListView.setSelection(mData.size() - 1);//將信息拉倒最後一條
                mEditTextContent.setText("");//輸入框清空
                break;
            default:
                break;
        }
    }
public class MessageAdapter extends BaseAdapter {
    private LayoutInflater mInflater;
    private List<ChatMessage> mData;
    private Html.ImageGetter mImageGetter;
    private SimpleDateFormat mFormat;

    public MessageAdapter(LayoutInflater mInflater, List<ChatMessage> mData, Html.ImageGetter mImageGetter) {
        this.mInflater = mInflater;
        this.mData = mData;
        this.mImageGetter = mImageGetter;
        mFormat = new SimpleDateFormat("EEE HH:mm");
    }

    @Override
    public int getCount() {
        return mData.size();
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup viewGroup) {
        ViewHolder vh = null;
        if (convertView == null){
            convertView = mInflater.inflate(R.layout.item_message,null);
            vh = new ViewHolder();
            vh.imageview_head = (ImageView) convertView.findViewById(R.id.image_head);
            vh.textview_time = (TextView) convertView.findViewById(R.id.textview_time);
            vh.textview_title = (TextView) convertView.findViewById(R.id.textview_title );
            vh.textview_nickname = (TextView) convertView.findViewById(R.id.textview_nickname);
            vh.textview_message = (TextView) convertView.findViewById(R.id.textview_message);
            convertView.setTag(vh);
        }else{
            vh = (ViewHolder) convertView.getTag();
        }
        ChatMessage msg = mData.get(position);
        vh.imageview_head.setImageResource(msg.getImageHead());
        vh.textview_title.setText(msg.getTitle());
        vh.textview_nickname.setText(msg.getNickname());
        Spanned spanned = Html.fromHtml(msg.getTextMessage(),mImageGetter,null);
        vh.textview_message.setText(spanned);
        String time = mFormat.format(new Date(msg.getTime()));
        vh.textview_time.setText(time);
//        vh.textview_message.setText(Html.fromHtml(msg.getTextMessage(), mImageGetter, null));
//        vh.textview_time.setText("時間"+msg.getTime());
        return convertView;
    }
    class ViewHolder{
        ImageView imageview_head;
        TextView textview_title;
        TextView textview_nickname;
        TextView textview_time;
        TextView textview_message;
    }
}
public class ChatMessage {
    private int imageHead;
    private String title;
    private String nickname;
    private long time;
    private String textMessage;

    public ChatMessage(){

    }
    public ChatMessage(int imageHead, String title, String nickname, long time, String textMessage) {
        this.imageHead = imageHead;
        this.title = title;
        this.nickname = nickname;
        this.time = time;
        this.textMessage = textMessage;
    }

    public int getImageHead() {
        return imageHead;
    }

    public void setImageHead(int imageHead) {
        this.imageHead = imageHead;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public long getTime() {
        return time;
    }

    public void setTime(long time) {
        this.time = time;
    }

    public String getTextMessage() {
        return textMessage;
    }

    public void setTextMessage(String textMessage) {
        this.textMessage = textMessage;
    }
}

聊天界面的整體佈局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    tools:context=".MainActivity">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center"
        android:background="#3275C4">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="聊天界面"
            android:padding="13dp"
            android:textSize="20sp"
            android:textColor="#ffffff"/>
    </LinearLayout>
    <ListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:background="@drawable/listview_background"
        android:divider="@null">
    </ListView>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:gravity="center">
        <ImageView
            android:id="@+id/imageview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@mipmap/eoj"/>
        <Button
            android:id="@+id/button_left"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="發送"
            android:layout_margin="5dp"
            android:background="@drawable/send_background"/>
        <EditText
            android:id="@+id/edittext"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="40dp"
            android:layout_margin="5dp"
            android:background="@color/white"/>
        <Button
            android:id="@+id/button_right"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="發送"
            android:layout_margin="5dp"
            android:background="@drawable/send_background"/>
    </LinearLayout>

</LinearLayout>

listview中的佈局設計

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
        <TextView
            android:id="@+id/textview_time"
            android:gravity="center"
            android:padding="10dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="星期五  10:36"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <ImageView
            android:id="@+id/image_head"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:src="@mipmap/ic_launcher"/>
        <LinearLayout
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">
                <TextView
                    android:id="@+id/textview_title"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textSize="15dp"
                    android:textColor="@color/white"
                    android:text="營長"
                    android:background="@drawable/text_background"/>
                <TextView
                    android:id="@+id/textview_nickname"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textColor="#000000"
                    android:text="乒乒乓乓"/>
            </LinearLayout>
            <TextView
                android:id="@+id/textview_message"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="#000000"
                android:text="這裏是聊天內容這裏這裏是聊天內容"
                android:layout_marginRight="70dp"
                android:background="@mipmap/eng"
                android:layout_marginTop="5dp"/>
        </LinearLayout>
    </LinearLayout>

</LinearLayout>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章