android studio聊天界面

 

登录活动:

class MainActivity : AppCompatActivity() ,View.OnClickListener{

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val button: Button = findViewById(R.id.button)
        button.setOnClickListener(this)
        val button1: Button = findViewById(R.id.button1)
        button1.setOnClickListener{//按退出按钮退出程序
            android.os.Process.killProcess(android.os.Process.myPid())
        }
    }

    override fun onClick(v: View?) {
        val editText:EditText = findViewById(R.id.editText)
        val textView: TextView = findViewById(R.id.textView2)

        when(v?.id){
            R.id.button -> {
                val inputText = editText.text.toString()
                val data = textView.getText().toString()
                val intent = Intent(this,xryActivity2::class.java)
                if ( inputText == "123456" && data == "Xueruoyu"){
                    intent.putExtra("extra_data",data)
                    startActivity(intent)
                }else{
                    AlertDialog.Builder(this).apply {
                        setTitle("提示信息:")
                        setMessage("用户名和密码错误!")
                        setCancelable(false)
                        setPositiveButton("确定"){
                                dialog,which ->
                        }
                        setNegativeButton("取消"){
                                dialog,which ->finish()
                            System.exit(0)
                        }
                        show()
                    }
                }
            }

        }
    }
}

 

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/editText"
        android:layout_width="252dp"
        android:layout_height="55dp"
        android:hint="请输入密码"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.603"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.445"
        tools:ignore="SpeakableTextPresentCheck"/>

    <TextView
        android:id="@+id/textView"
        android:layout_width="102dp"
        android:layout_height="61dp"
        android:text="密码:"
        android:textSize="25dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.097"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.461"
        tools:ignore="MissingConstraints" />

    <Button
        android:id="@+id/button"
        android:layout_width="96dp"
        android:layout_height="57dp"
        android:text="登录"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.349"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.565" />

    <Button
        android:id="@+id/button1"
        android:layout_width="96dp"
        android:layout_height="57dp"
        android:text="退出"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.755"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.565" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Xueruoyu"
        android:textSize="22dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.333" />

    <de.hdodenhof.circleimageview.CircleImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@drawable/img_1"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.183"
        tools:ignore="MissingClass,MissingConstraints" />

</androidx.constraintlayout.widget.ConstraintLayout>

聊天列表:

class xryActivity2 : AppCompatActivity(){
    private val List = ArrayList<Messages>()
    @SuppressLint("MissingInflatedId")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_recyclerview)
        val recyclerView=findViewById<RecyclerView>(R.id.recycleViewItem)
        initMessages()
        recyclerView.layoutManager = LinearLayoutManager(this)
        val adapter=MyAdapter(List)
        recyclerView.adapter=adapter

        val mDivider = androidx.recyclerview.widget.DividerItemDecoration(this,androidx.recyclerview.widget.DividerItemDecoration.VERTICAL)
        recyclerView.addItemDecoration(mDivider)

    }

    private fun initMessages(){
        List.add(Messages(R.drawable.img_2,"bob","This is Tom.Nice talking to you"))
        List.add(Messages(R.drawable.img_3,"Alice","hi"))
        List.add(Messages(R.drawable.img_4,"mom","好的"))
        List.add(Messages(R.drawable.img_5,"dad","ok"))
        List.add(Messages(R.drawable.img_6,"John","hello"))
        List.add(Messages(R.drawable.img_7,"Mike","行" ))
        List.add(Messages(R.drawable.img_8,"Sam","666"))
        List.add(Messages(R.drawable.img_1,"Bill","嗯"))
        List.add(Messages(R.drawable.img_3,"bella","哈哈哈哈哈"))

    }
}

界面:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recycleViewItem"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />


</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="80dp">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingLeft="8dp"
        android:paddingRight="8dp">

        <ImageView
            android:id="@+id/imageView"
            android:layout_width="80dp"
            android:layout_height="80dp"
             />
    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingBottom="5dp"
        android:paddingTop="5dp"
        android:paddingRight="8dp"
        android:paddingLeft="8dp"
        android:orientation="vertical">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <TextView
                android:id="@+id/textView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"

                android:textSize="25sp"
                android:layout_alignParentStart="true"
                android:layout_alignParentLeft="true"
                android:ellipsize="end"
                android:maxLines="1"/>


        </RelativeLayout>



        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <TextView
                android:id="@+id/textView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="18sp"
                android:layout_alignParentStart="true"
                android:layout_alignParentLeft="true"
                android:ellipsize="end"
                android:maxLines="1"/>





        </RelativeLayout>


    </LinearLayout>





</LinearLayout>

对话框功能:

class xryActivity3:AppCompatActivity(),View.OnClickListener {
    private val msgList = ArrayList<Msg>()
    private lateinit var adapter: MsgAdapter


    override fun onCreate(savedInstanceState: Bundle?){
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_xry3)
        initMsg()
        val layoutManager = LinearLayoutManager(this)
        val recyclerView = findViewById<RecyclerView>(R.id.recycleView)
        recyclerView.layoutManager = layoutManager
       if (!::adapter.isInitialized){
           adapter = MsgAdapter(msgList)
       }
        recyclerView.adapter = adapter
        val send = findViewById<Button>(R.id.send)
        send.setOnClickListener(this)

    }
    override fun onClick(v: View?) {
        val editText: EditText = findViewById(R.id.editText)

        when(v?.id){
            R.id.send->{
                val inputText = editText.text.toString()
                if(inputText.isNotEmpty()){
                    val msg = Msg(inputText,Msg.TYPE_SENT)
                    val recyclerView = findViewById<RecyclerView>(R.id.recycleView)
                    msgList.add(msg)
                    adapter?.notifyItemInserted(msgList.size - 1)
                    recyclerView.scrollToPosition(msgList.size - 1)
                    editText.setText("")
                }

            }
        }
    }
    private fun initMsg() {
        val msg1 = Msg("Hello guy.",Msg.TYPE_RECEIVED)
        msgList.add(msg1)
        val msg2 = Msg("Hello.Who is that?",Msg.TYPE_SENT)
        msgList.add(msg2)
        val msg3 = Msg("This is Tom.Nice talking to you.",Msg.TYPE_RECEIVED)
        msgList.add(msg3)
    }
}

界面:

<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">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recycleView"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <EditText
            android:id="@+id/editText"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:hint="Type something 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"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="10dp">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="left"
        android:background="@drawable/message_left">
        <TextView
            android:id="@+id/leftMsg"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_margin="10dp"
            android:textColor="#fff"/>
    </LinearLayout>

</FrameLayout>

右边界面:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="10dp">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:background="@drawable/message_right">

        <TextView
            android:id="@+id/rightMsg"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_margin="10dp"
            android:textColor="#000" />
    </LinearLayout>
</FrameLayout>

message:

class Messages (var picture:Int,var name:String,var detail:String)

msg:

class Msg(val content:String,val type:Int) {
    companion object{
        const val TYPE_RECEIVED = 0
        const val TYPE_SENT = 1
    }
}

msgAdapter:
 

class MsgAdapter(val msgList: List<Msg>): RecyclerView.Adapter<RecyclerView.ViewHolder>() {
    inner class LeftViewHolder(view:View):RecyclerView.ViewHolder(view){
        val leftMsg:TextView = view.findViewById(R.id.leftMsg)
    }

    inner class RightViewHolder(view:View):RecyclerView.ViewHolder(view){
        val rightMsg:TextView = view.findViewById(R.id.rightMsg)
    }
    override fun onCreateViewHolder(parent: ViewGroup,viewType: Int) = if(viewType == Msg.TYPE_RECEIVED){
        val view = LayoutInflater.from(parent.context).inflate(R.layout.msg_left_item,parent,false)
        LeftViewHolder(view)
    }else{
        val view = LayoutInflater.from(parent.context).inflate(R.layout.msg_right_item,parent,false)
        RightViewHolder(view)
    }
    override fun getItemViewType(position: Int): Int {
        val msg = msgList[position]
        return msg.type
    }

    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
        val msg = msgList[position]
        when(holder){
            is LeftViewHolder -> holder.leftMsg.text = msg.content
            is RightViewHolder -> holder.rightMsg.text = msg.content
            else -> throw IllegalAccessException()
        }
    }

    override fun getItemCount() = msgList.size

}

myAdapter:

class MyAdapter(val myList:List<Messages>): RecyclerView.Adapter<MyAdapter.ViewHolder>() {
    inner class ViewHolder(view:View):RecyclerView.ViewHolder(view){
        val Image: ImageView = view.findViewById(R.id.imageView)
        val Name:TextView=view.findViewById(R.id.textView)
        val Message:TextView=view.findViewById(R.id.textView2)
    }


    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val view=LayoutInflater.from(parent.context).inflate(R.layout.activity_xry2,parent,false)
        val viewHolder=ViewHolder(view)
        viewHolder.Name.setOnClickListener{
            val intent = Intent()
            intent.setClass(it.context,xryActivity3::class.java)
            it.context.startActivity(intent)
        }

        return ViewHolder(view)

    }



    override fun getItemCount(): Int {
        return myList.size
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val messages=myList[position]
        holder.Image.setImageResource(messages.picture)
        holder.Name.text= messages.name
        holder.Message.text=messages.detail
    }
}

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值