扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这篇文章主要为大家展示了“如何实现自定义Dialog弹框和其背景阴影”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何实现自定义Dialog弹框和其背景阴影”这篇文章吧。
在栖霞等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站制作、成都网站制作 网站设计制作按需设计网站,公司网站建设,企业网站建设,成都品牌网站建设,成都全网营销,外贸营销网站建设,栖霞网站建设费用合理。
自定义Dialog的弹框,其实要点都是把自定义好的view用setContentView(view)的方法设置进dialog里,首先我们先看一个简单的自定义Dialog。
一、写布局文件:custom_dialog_layout.xml(这个布局就是一个简单的提示内容,下面有一个确定的按钮,请参看评论中的效果图)
写好布局文件后,由于布局直角不好看,我们可以设置边框为圆角的shape,写入,代码如下:dialog_content_white_with_radius
二、写自定义Dialog类继承自Dialog:
/** [Description] * 只有确认button * [How to use] * * [Tips] * * Created by lan.zheng on 2017/7/25 18:26. */ public class SureClickDialog extends Dialog { private Listener mListener; public SureClickDialog(Context context) { super(context); } public SureClickDialog(Context context, String content, Listener listener){ super(context, R.style.custom_dialog_style); mListener = listener; View contentView = LayoutInflater.from(context).inflate(R.layout.dialog_have_been_sign_section_show, null); TextView contentTextView = (TextView) contentView.findViewById(R.id.dialog_content_text); contentTextView.setText(content); TextView sureButton = (TextView) contentView.findViewById(R.id.tv_sure); //消失监听 this.setOnDismissListener(new OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { mListener.onDialogDismissListener(); } }); //确认 sureButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dismiss(); mListener.onSureListerner(); } }); setContentView(contentView); } public interface Listener { void onDialogDismissListener(); void onSureListerner(); } }
这里我们只监听弹框消失和点击确定的按钮,好了基本工作到这里完成了,最后就是设置样式style,一般弹框背景都是半透明的遮罩:
这样就完成了一个背景半透明的弹框了。
设置
@Override public void show() { super.show(); /** * 设置宽度全屏,要设置在show的后面 */ WindowManager.LayoutParams layoutParams = getWindow().getAttributes(); layoutParams.width= ViewGroup.LayoutParams.MATCH_PARENT; layoutParams.height= ViewGroup.LayoutParams.MATCH_PARENT; getWindow().getDecorView().setPadding(0, 0, 0, 0); getWindow().setAttributes(layoutParams); }
发现是生效的,我布局中的背景是成功的应用上了,但是发现点击外围却不能让弹框消失,这是因为你的弹框已经是全屏了,所以在屏幕上就没有所谓的弹框外围了,这时候我们可以自己去监听点击事件,我们来重写一下自定义Dialog类:
/** * [Description] * 只有确认button * [How to use] * new SureClickDialog() * [Tips] * isClickOutsideCanDismiss必须给值,true表示可点击外围消失,false表示不能 * Created by lan.zheng on 2017/7/25 18:26. */ public class SureClickDialog extends Dialog { private Listener mListener; public SureClickDialog(Context context) { super(context); } public SureClickDialog(Context context, String content, boolean isClickOutsideCanDismiss,Listener listener){ super(context, R.style.custom_dialog_style); mListener = listener; View contentView = LayoutInflater.from(context).inflate(R.layout.dialog_have_been_sign_section_show, null); LinearLayout linearLayout = (LinearLayout)contentView.findViewById(R.id.content_layout) ; //自定义布局的最外层 linearLayout.setBackgroundColor(context.getResources().getColor(R.color.half_transparent)); linearLayout.setOnClickListener(new View.OnClickListener() { //为其设置自定义点击监听 @Override public void onClick(View v) { if(isClickOutsideCanDismiss){ dismiss(); } } }); TextView contentTextView = (TextView) contentView.findViewById(R.id.dialog_content_text); contentTextView.setText(content); TextView sureButton = (TextView) contentView.findViewById(R.id.tv_sure); //消失监听 this.setOnDismissListener(new OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { mListener.onDialogDismissListener(); } }); //确认 sureButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dismiss(); mListener.onSureListerner(); } }); setContentView(contentView); } @Override public void show() { super.show(); WindowManager.LayoutParams layoutParams = getWindow().getAttributes(); layoutParams.width= ViewGroup.LayoutParams.MATCH_PARENT; layoutParams.height= ViewGroup.LayoutParams.MATCH_PARENT; getWindow().getDecorView().setPadding(0, 0, 0, 0); getWindow().setAttributes(layoutParams); } public interface Listener { void onDialogDismissListener(); void onSureListerner(); } }
OK,关于弹框的就写到这里啦,自定义的功能十分丰富和具有可塑性,有兴趣的可以研究一下。
以上是“如何实现自定义Dialog弹框和其背景阴影”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流