时间:2023-07-24 23:00:02 | 来源:网站运营
时间:2023-07-24 23:00:02 来源:网站运营
Android学习--制作ui界面:用Android制作一个简单的聊天界面,大概像微信聊天那样的界面<?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" android:background="#d8e0e8"> <android.support.v7.widget.RecyclerView android:id="@+id/msg_recycle_view" android:layout_height="0dp" android:layout_width="match_parent" android:layout_weight="1" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <EditText android:id="@+id/input_text" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:hint="type somethin here" android:maxLines="2"/> <Button android:id="@+id/send" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Send" /> </LinearLayout></LinearLayout>
<?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="wrap_content" android:padding="10dp"> <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: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_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" android:background="@drawable/right"> <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></LinearLayout>
public class Msg { public static final int receive=0; public static final int send=1; private String content; private int type;//构造方法 public Msg(String content,int type){ this.content=content; this.type=type; }//get方法 获取内容与消息类型 public String getContent(){ return content; } public int getType(){ return type; }}
public class MsgAdapter extends RecyclerView.Adapter<MsgAdapter.ViewHolder> { private List<Msg> mMsgList;//内部类 ViewHoleder 继承RecyclerView.ViewHoleder public class ViewHolder extends RecyclerView.ViewHolder{ TextView leftMsg; TextView righyMsg; LinearLayout leftlayout; LinearLayout rightlayout;//ViewHolder构造函数 传入参数view (这个参数是RecyclerView 子项的最外层布局)//这样便可以用findViewById()方法获取linelayout和 TextView public ViewHolder(View view){ super(view); leftlayout=(LinearLayout) view.findViewById(R.id.left_layout); rightlayout=(LinearLayout)view.findViewById(R.id.right_layout); leftMsg=(TextView)view.findViewById(R.id.left_msg); righyMsg=(TextView)view.findViewById(R.id.right_msg); } }//MsgAdapter构造函数 把数据源传进来 赋值给新变量mMsgList 后续操作用mMsgList public MsgAdapter(List<Msg> msgList){ mMsgList=msgList; }//重写RecyclerView.Adapter 的三个方法 @Override//这个方法是用于创建ViewHolder实例的 //加载 msg_item的布局 并传入ViewHolder实例中 public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.msg_item,parent,false); return new ViewHolder(view); } @Override //这个方法用于对子项的数据进行操作 判断 赋值等。 public void onBindViewHolder(ViewHolder holder, int position) { Msg msg =mMsgList.get(position); if(msg.getType()==Msg.receive){//接受消息 在左边布局显示 holder.leftlayout.setVisibility(View.VISIBLE); holder.rightlayout.setVisibility(View.GONE); holder.leftMsg.setText(msg.getContent()); }else if(msg.getType()==Msg.send){ //发送消息 在右边布局显示 holder.rightlayout.setVisibility(View.VISIBLE); holder.leftMsg.setVisibility(View.GONE); holder.righyMsg.setText(msg.getContent()); } } @Override//获取RecycleView的子项的个数 public int getItemCount() { return mMsgList.size(); }}
public class MainActivity extends AppCompatActivity { private List<Msg> msgList = new ArrayList<>(); private EditText inputText; private Button send; private RecyclerView msgRecyclerView; private MsgAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化消息数据 initMsgs(); //创建 输入框与发送按钮 的实例化对象 inputText = (EditText) findViewById(R.id.input_text); send = (Button) findViewById(R.id.send); //创建 RecyclerView 滚动控件的实例化对象 msgRecyclerView = (RecyclerView) findViewById(R.id.msg_recycle_view); //RecyclerView设置 LineLayout 的布局方式 LinearLayoutManager layoutManager = new LinearLayoutManager(this); msgRecyclerView.setLayoutManager(layoutManager); //RecyclerView设置适配器 并将消息的数据传入适配器中 实现和数据的关联 adapter = new MsgAdapter(msgList); msgRecyclerView.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.send); msgList.add(msg); adapter.notifyItemInserted(msgList.size()-1); //当有新消息时 刷新ListView中的显示 msgRecyclerView.scrollToPosition(msgList.size()-1);//将ListView 定位到最后一行 inputText.setText("");//清空输入框的内容 } } }); } //初始的三条消息 private void initMsgs() { Msg msg1 = new Msg("Hello .", Msg.receive); msgList.add(msg1); Msg msg2 = new Msg("Hello who are you? ", Msg.send); msgList.add(msg2); Msg msg3 = new Msg("haha This is stinglog", Msg.receive); msgList.add(msg3); }}
最终的效果大概是这样的,我的也实现了 但是消息的背景图片选的太丑了,就不在此献丑了。关键词:界面,学习