自定义Dialog
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义Dialog相关的知识,希望对你有一定的参考价值。
一: 效果图
二:继承Dialog
1.居中弹出
package com.xiaoguaishou.customdialog; import android.app.Activity; import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.view.Display; import android.view.Gravity; import android.view.View; import android.view.Window; import android.view.WindowManager; /** * @describe 自定义居中弹出dialog */ public class CenterDialog extends Dialog implements View.OnClickListener { private Context context; private int layoutResID; private View contentView; /** * 要监听的控件id */ private int[] listenedItems; private OnCenterItemClickListener listener; public CenterDialog(Context context, int layoutResID, int[] listenedItems) { super(context, R.style.dialog_custom); this.context = context; this.layoutResID = layoutResID; this.listenedItems = listenedItems; } public CenterDialog(Context context, View contentView, int[] listenedItems) { super(context, R.style.dialog_custom); this.context = context; this.contentView = contentView; this.listenedItems = listenedItems; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Window window = getWindow(); window.setGravity(Gravity.CENTER); // 此处可以设置dialog显示的位置为居中 // window.setWindowAnimations(R.style.bottom_menu_animation); // 添加动画效果 if (contentView != null) setContentView(contentView); else setContentView(layoutResID); // 宽度全屏 WindowManager windowManager = ((Activity) context).getWindowManager(); Display display = windowManager.getDefaultDisplay(); WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.width = display.getWidth() * 4 / 5; // 设置dialog宽度为屏幕的4/5 getWindow().setAttributes(lp); // 点击Dialog外部消失 setCanceledOnTouchOutside(true); for (int id : listenedItems) { findViewById(id).setOnClickListener(this); } } public interface OnCenterItemClickListener { void OnCenterItemClick(CenterDialog dialog, View view); } public void setOnCenterItemClickListener(OnCenterItemClickListener listener) { this.listener = listener; } @Override public void onClick(View view) { dismiss(); listener.OnCenterItemClick(this, view); } }
2.底部弹出
package com.xiaoguaishou.customdialog; import android.app.Activity; import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.view.Display; import android.view.Gravity; import android.view.View; import android.view.Window; import android.view.WindowManager; public class BottomDialog extends Dialog implements View.OnClickListener { private Context context; private int layoutResID; private View contentView; /** * 要监听的控件id */ private int[] listenedItems; private OnBottomMenuItemClickListener listener; public BottomDialog(Context context, int layoutResID, int[] listenedItems) { super(context, R.style.dialog_custom); this.context = context; this.layoutResID = layoutResID; this.listenedItems = listenedItems; } public BottomDialog(Context context, View contentView, int[] listenedItems) { super(context, R.style.dialog_custom); this.context = context; this.contentView = contentView; this.listenedItems = listenedItems; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Window window = getWindow(); window.setGravity(Gravity.BOTTOM); // 此处可以设置dialog显示的位置 window.setWindowAnimations(R.style.bottom_menu_animation); // 添加动画 if (contentView != null) setContentView(contentView); else setContentView(layoutResID); // 宽度全屏 WindowManager windowManager = ((Activity) context).getWindowManager(); Display display = windowManager.getDefaultDisplay(); WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.width = display.getWidth() * 9 / 10; // 设置宽度 getWindow().setAttributes(lp); // 点击Dialog外部消失 setCanceledOnTouchOutside(true); for (int id : listenedItems) { findViewById(id).setOnClickListener(this); } } public interface OnBottomMenuItemClickListener { void onBottomMenuItemClick(BottomDialog dialog, View view); } public void setOnBottomMenuItemClickListener(OnBottomMenuItemClickListener listener) { this.listener = listener; } @Override public void onClick(View view) { dismiss(); listener.onBottomMenuItemClick(this, view); } }
三:自定义style
<!-- dialog底部弹出菜单动画 --> <style name="bottom_menu_animation" parent="android:Animation"> <item name="@android:windowEnterAnimation">@anim/bottom_menu_enter</item> <item name="@android:windowExitAnimation">@anim/bottom_menu_exit</item> </style> <!-- dialog样式 --> <style name="dialog_custom" parent="@android:style/Theme.Dialog"> <item name="android:windowIsFloating">true</item> <!--是否浮在界面上--> <item name="android:windowIsTranslucent">true</item> <!--是否半透明--> <item name="android:windowNoTitle">false</item> <!--是否有标题--> <item name="android:windowBackground">@android:color/transparent</item> <!--窗口背景色透明--> <item name="android:backgroundDimEnabled">false</item> <!--背景是否模糊显示--> </style>
四:弹入弹出动画
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="400" android:fromYDelta="100%p" /> </set>
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="600" android:toYDelta="100%p" /> </set>
五:最后贴一个代码结构
以上是关于自定义Dialog的主要内容,如果未能解决你的问题,请参考以下文章