android 自定义对话框

131 阅读1分钟
val dialogView:View = LayoutInflater.from(activity).inflate(R.layout.dialog_add_task,null,false)
val dialog = activity?.let { AlertDialog.Builder(it,R.style.myCorDialog) }//设置样式
val dialogBox = dialog?.setView(dialogView)?.create() //添加任务窗口
dialogBox?.window?.setGravity(Gravity.BOTTOM) //设置对话框弹出的位置
dialogBox?.window?.attributes?.y = 160 // 距离底部160
dialogBox?.show() //打开对话框
dialogBox?.dismiss() //关闭对话框
dialogView.findViewById<ImageButton>(R.id.setTime).setOnClickListener{ //事件监听器
	//方法体
}

第一行

LayoutInflater.from(context).inflate(int resource, @Nullable ViewGroup root, boolean attachToRoot)

context:上下文

resource:对话框布局

root:资源需要被添加的地方,一般为null

attachToRoot:是否添加到root,一般为false

第二行

activity?.let { AlertDialog.Builder(it,R.style.myCorDialog) }

R.style.myCorDialog为自定义的样式,下面的例子为添加圆角外框

如果没有要添加的style可以直接写activity?.let { AlertDialog.Builder(it) }

<style name="myCorDialog" parent="android:style/Theme.Dialog">
     <item name="android:windowBackground">@drawable/dialog_corner_bg</item> <!-- 背景透明 -->
     <item name="android:windowNoTitle">true</item> <!-- 没有标题 -->
     <item name="android:backgroundDimEnabled">true</item> <!-- 背景模糊 -->
</style>
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@color/colorAccent" />
            <corners android:radius="10dp" /> <!--弧度 -->
        </shape>
    </item>
    <item android:top="8dp" android:right="8dp" android:left="8dp" android:bottom="8dp"> <!--边框宽度 -->
        <shape android:shape="rectangle">
            <solid android:color="@color/white"/>
            <corners android:radius="6dp" />
            <padding android:bottom="8dp" android:left="8dp" android:right="8dp" android:top="8dp"/>
        </shape>
    </item>
</layer-list>

第四行

对话框弹出的位置设置:Gravity.TOP,Gravity.CENTER ,Gravity.BOTTEM

对话框事件监听器

dialogView.findViewById<ImageButton>(R.id.setTime).setOnClickListener{
	//方法体
}

相关链接:

blog.csdn.net/Naide_S/art… 关于dialog的显示位置设置