Android 第三十章 Dialog

一、AlertDialog

    private fun initAlertDialog(){
        val builder= AlertDialog.Builder(this)
        builder.setIcon(android.R.drawable.ic_dialog_alert)
        builder.setTitle("提示")
        builder.setMessage("网络异常,请检查网络连接!")
        builder.setPositiveButton("是",DialogInterface.OnClickListener { dialog, which ->
            Toast.makeText(applicationContext,"$which",Toast.LENGTH_LONG).show()
            dialog.dismiss()
        })
        builder.setNegativeButton("否",DialogInterface.OnClickListener { dialog, which ->
            Toast.makeText(applicationContext,"$which",Toast.LENGTH_LONG).show()
            dialog.dismiss()
        })
        builder.create().show()
    }
    private fun initAlertDialog() {
        val builder = AlertDialog.Builder(this)
//        val mView = View.inflate(applicationContext, R.layout.dialog_login, null)
        val mView = LayoutInflater.from(applicationContext).inflate(R.layout.dialog_login, null)
        val username: EditText = mView.findViewById(R.id.et_username)
        val password: EditText = mView.findViewById(R.id.et_password)
        val login: Button = mView.findViewById(R.id.btn_login);
        builder.setView(mView)
        val dialog = builder.create()
        //点击弹窗外是否消失
        dialog.setCanceledOnTouchOutside(true);
        dialog.show();

        val mWindow = dialog.window
        if (null != mWindow) {
            val l = mWindow.attributes
            l.width = 600
            l.height = 360
            mWindow.setGravity(Gravity.CENTER_VERTICAL)
            mWindow.attributes = l
        }

        login.setOnClickListener {
            if (username.text.toString() == "admin" && password.text.toString() == "123456") {
                Toast.makeText(applicationContext, "登录成功!", Toast.LENGTH_LONG).show()
                dialog.dismiss()
            } else {
                Toast.makeText(applicationContext, "请输入正确的用户名和密码!", Toast.LENGTH_LONG).show()
            }
        }
    }
<?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"
    android:gravity="center"
    android:orientation="vertical">

    <EditText
        android:layout_marginTop="30dp"
        android:id="@+id/et_username"
        android:layout_width="300dp"
        android:layout_height="80dp"
        android:hint="请输入用户名"
        android:paddingStart="10dp"
        android:textSize="30sp" />

    <EditText
        android:id="@+id/et_password"
        android:layout_width="300dp"
        android:layout_height="80dp"
        android:layout_marginTop="10dp"
        android:hint="请输入密码"
        android:paddingStart="10dp"
        android:textSize="30sp" />


    <Button
        android:id="@+id/btn_login"
        android:layout_width="300dp"
        android:layout_height="80dp"
        android:layout_marginTop="30dp"
        android:text="登录"
        android:textSize="30sp" />


</LinearLayout>

二、ProgressDialog

    private fun initProgressDialog() {
        val mProgress = ProgressDialog(this)
        mProgress.setTitle("提示")
        mProgress.setMessage("正在加载,请稍等。。。")
        mProgress.show()
    }
    private fun initProgressDialog() {
        val mProgress = ProgressDialog(this)
        mProgress.setTitle("提示")
        mProgress.setMessage("正在加载,请稍等。。。")
        mProgress.setIndeterminate(false)
        mProgress.setMax(100)
        mProgress.setCancelable(true)
        mProgress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL)
        mProgress.show()

        mProgress.setProgress(20)
    }

三、自定义Dialog

class CustomDialog(private val mContext: Context, listener: setOnDialogListener) : Dialog(mContext) {

    private var listener: setOnDialogListener = listener
    private lateinit var et_username: EditText
    private lateinit var et_password: EditText
    private lateinit var btn_login: Button

    interface setOnDialogListener {
        fun ok()
        fun cancel()
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        this.setContentView(R.layout.dialog_custom)
        setCanceledOnTouchOutside(true)
        initView()
        initData()
        initClick()
    }

    private fun initView() {
        et_username = findViewById(R.id.et_username)
        et_password = findViewById(R.id.et_password)
        btn_login = findViewById(R.id.btn_login)
    }

    private fun initData() {
        window!!.attributes.height = (window!!.windowManager.defaultDisplay.height * 0.5).toInt()
        window!!.attributes.width = (window!!.windowManager.defaultDisplay.width * 0.8).toInt()
    }

    private fun initClick() {
        btn_login.setOnClickListener {
            if (et_username.text.toString() == "admin" && et_password.text.toString() == "123456") {
                listener.ok()
                dismiss()
            } else {
                listener.cancel()
                dismiss()
            }
        }
    }

}
<?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"
    android:gravity="center"
    android:orientation="vertical">

    <EditText
        android:id="@+id/et_username"
        android:layout_width="300dp"
        android:layout_height="80dp"
        android:textSize="30sp" />

    <EditText
        android:id="@+id/et_password"
        android:layout_width="300dp"
        android:layout_height="80dp"
        android:layout_marginTop="30dp"
        android:textSize="30sp" />

    <Button
        android:id="@+id/btn_login"
        android:layout_width="300dp"
        android:layout_height="80dp"
        android:layout_marginTop="30dp"
        android:text="登录"
        android:textSize="30sp" />


</LinearLayout>
private fun initCustomDialog() {
   CustomDialog(this, object : CustomDialog.setOnDialogListener {
     override fun ok() {
     	Toast.makeText(applicationContext, "登陆成功", Toast.LENGTH_LONG).show()
     }	
	 override fun cancel() {
   		Toast.makeText(applicationContext, "登陆失败", Toast.LENGTH_LONG).show()
 	 }
	}).show()
}

四、PopupWindow

    private fun initPopupWindow(view: View) { //view 控件
        val mView = View.inflate(this, R.layout.dialog_sort, null)
        val rv: RecyclerView = mView.findViewById(R.id.rv)
        rv.layoutManager = LinearLayoutManager(this)
        var list: ArrayList<String> = ArrayList<String>()
        list.add("mouse")
        list.add("cattle")
        list.add("tiger")
        list.add("rabbit")
        list.add("dragon")
        list.add("snake")
        list.add("horse")
        list.add("sheep")
        list.add("monkey")
        list.add("chicken")
        list.add("dog")
        list.add("pig")
        val adapter = AnimalAdapter(this, list)
        rv.adapter = adapter

        val popupWindow = PopupWindow(
            mView,
            ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT
        )
        popupWindow.setBackgroundDrawable(ColorDrawable(0x90EE90))
        popupWindow.isFocusable = false
        popupWindow.isOutsideTouchable = true
        popupWindow.showAsDropDown(view, 0, 0)
        popupWindow.setTouchInterceptor { v, event ->
            false
        }


        adapter.setOnItemClickListener(object : AnimalAdapter.OnItemClickListener {
            override fun OnItemClick(position: Int) {
                Toast.makeText(applicationContext, list[position], Toast.LENGTH_SHORT).show()
                if (popupWindow.isShowing) {
                    popupWindow.dismiss()
                }
            }
        })
    }
class AnimalAdapter(private val mContext: Context, list: ArrayList<String>) : RecyclerView.Adapter<AnimalAdapter.ViewHolder>() {

    private val list: ArrayList<String> = list

    private lateinit var listener: OnItemClickListener


    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val view = View.inflate(mContext, R.layout.adapter_animal, null)
        return ViewHolder(view)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {

        holder.tv_test.text = list[position]

        holder.tv_test.setOnClickListener {
            listener.OnItemClick(position)
        }
    }

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

    class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        var tv_test: TextView = itemView.findViewById(R.id.tv_test)
    }

    interface OnItemClickListener {
        fun OnItemClick(position: Int)
    }

    fun setOnItemClickListener(listener: OnItemClickListener) {
        this.listener = listener
    }
}
<?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"
    android:gravity="center"
    android:orientation="vertical">

    <TextView
        android:id="@+id/tv_test"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:background="#90EE90"
        android:gravity="center"
        android:text="测试"
        android:textSize="30sp" />

</LinearLayout>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值