实验 聊天界面UI

来源:互联网 发布:阿里云 cdn 配置 编辑:程序博客网 时间:2024/04/30 20:16

一 实验现象


二 实验部分代码

mainActivity中的代码

package com.example.wetalkui;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.View;import android.view.Window;import android.widget.Button;import android.widget.EditText;import android.widget.ListView;public class MainActivity extends Activity{private ListView msgListView;      private EditText inputText;      private Button send;      private MsgAdapter adapter;        private List<Msg> msgList = new ArrayList<Msg>();  @Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.listviewui);initMsgs();          adapter = new MsgAdapter(MainActivity.this, R.layout.chatui, msgList);          inputText = (EditText)findViewById(R.id.input_text);          send = (Button)findViewById(R.id.send);          msgListView = (ListView)findViewById(R.id.msg_list_view);          msgListView.setAdapter(adapter);          send.setOnClickListener(new View.OnClickListener() {              @Override              public void onClick(View view) {                  String content = inputText.getText().toString();                  if(!"".equals(content)) {                      Msg msg = new Msg(content, Msg.TYPE_SEND);                      msgList.add(msg);                      adapter.notifyDataSetChanged();                      msgListView.setSelection(msgList.size());                      inputText.setText("");                  }              }          });      }        private void initMsgs() {          Msg msg1 = new Msg("Hello, how are you?", Msg.TYPE_RECEIVED);          msgList.add(msg1);          Msg msg2 = new Msg("Fine, thank you, and you?", Msg.TYPE_SEND);          msgList.add(msg2);          Msg msg3 = new Msg("I am fine, too!", Msg.TYPE_RECEIVED);          msgList.add(msg3);      }  @Overridepublic boolean onCreateOptionsMenu(Menu menu){// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}
Msg中代码
package com.example.wetalkui;public class Msg { public static final int TYPE_RECEIVED = 0;      public static final int TYPE_SEND = 1;        private String content;      private int type;        public Msg(String content, int type) {          this.content = content;          this.type = type;      }        public String getContent() {          return content;      }        public int getType() {          return type;      }  }
MsgAdapter

package com.example.wetalkui;import java.util.List;import android.content.Context;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 MsgAdapter extends ArrayAdapter<Msg> {    private int resourceld;public MsgAdapter(Context context, int textViewResourceId,List<Msg> objects) {super(context, textViewResourceId, objects);// TODO Auto-generated constructor stubresourceld = textViewResourceId;}    public View getView(int position, View convertView, ViewGroup parent){    Msg msg = getItem(position);          View view;          ViewHolder viewHolder;          if(convertView == null) {              view = LayoutInflater.from(getContext()).inflate(resourceld, null);              viewHolder = new ViewHolder();              viewHolder.leftLayout = (LinearLayout)view.findViewById(R.id.left_layout);              viewHolder.rightLayout = (LinearLayout)view.findViewById(R.id.right_layout);              viewHolder.leftMsg = (TextView)view.findViewById(R.id.left_msg);              viewHolder.rightMsg = (TextView)view.findViewById(R.id.right_msg);              view.setTag(viewHolder);          } else {              view = convertView;              viewHolder = (ViewHolder) view.getTag();          }          if(msg.getType() == Msg.TYPE_RECEIVED) {              viewHolder.leftLayout.setVisibility(View.VISIBLE);              viewHolder.rightLayout.setVisibility(View.GONE);              viewHolder.leftMsg.setText(msg.getContent());          } else if(msg.getType() == Msg.TYPE_SEND) {              viewHolder.rightLayout.setVisibility(View.VISIBLE);              viewHolder.leftLayout.setVisibility(View.GONE);              viewHolder.rightMsg.setText(msg.getContent());          }      return view;       }    class ViewHolder{    LinearLayout leftLayout;          LinearLayout rightLayout;          TextView leftMsg;          TextView rightMsg;    }}
部分聊天界面的设计

 <LinearLayout         android:id="@+id/left_layout"        android:layout_height="wrap_content"        android:layout_width="wrap_content"        android:gravity="left"         android:background="@drawable/left_messages"               >        <TextView             android:id="@+id/left_msg"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_gravity="center"            android:layout_margin="10dp"            android:textColor="#fff"            />        </LinearLayout>        <LinearLayout             android:id="@+id/right_layout"            android:layout_height="wrap_content"            android:layout_width="wrap_content"            android:layout_gravity="right"             android:background="@drawable/right_messages"                         >          <TextView               android:id="@+id/right_msg"              android:layout_width="wrap_content"              android:layout_height="wrap_content"              android:layout_gravity="center"              android:layout_margin="10dp"/>                    </LinearLayout>    
三 实验后体会

  
实验开始时出现了空指针,不能启动程序,在模拟器上一运行就是程序已经停止了,经过定位后发现在setContentView(R.layout.activity_main);initMsgs(); 中存在问题,根据后面的程序所应用的Id都是在listviewui这个layout中,所以开始运行的界面不是activity_main而是listviewui,只要改成setContentView(R.layout.listviewui);就可以运行程序了。此实验中的聊天方框也是一个难点,对制图不好的同学也是个挑战。


0 0
原创粉丝点击