android dialog自定义实例详解
发布时间:2022-03-15 20:29:22
标签:android,dialog
本人工作有一个月多了。对于android很多东西,都有了新的了解或者说真正的掌握。为了让更多的像我这样的小白少走弯路,所以我会坚持将我在工作中遇到的一些比较令我印象深刻的知识点整合出来给大家(顺序是按照我工作到现在的时间来制作的,其实也是想给自己一个记录吧。记录自己一路走来以及以后的路,
至少我想找到曾经的记录都有了)。
第一个需求:简单的自定义dialog
需求:创建一个dialog,该dialog具备以下功能:
1.有一个窗口可以显示文章
2.根据需求显示
1)点击同意(不同意),触发对应的事件(同意的事件会弹出一个Toast,不同意则会关闭程序)
2)点击关闭,关闭dialog
1.在main.xml文件中设定一个按钮,点击会弹出dialog
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:layout_width="100dp"
android:layout_height="50dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="@string/hello_world"
android:id="@+id/btn"
android:background="@drawable/sl_btn_red" />
</RelativeLayout>
2.创建dialog的内容布局,布局中设定了使用相对布局设定了三个按钮,其中两个一起出现(同意和不同意),另外一个单独出现(关闭)默认是两个出现
private TextView btnClose = null;
private TextView btnAgree = null;
private TextView btnDisagree = null;
private WebView mWebView = null;
public MyDialog(Context context) {
super(context, R.style.item_tnc_dialog);
setCancelable(false); // 阻止返回键的响应
setContentView(R.layout.dialog_view);
getWindow().setLayout(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT);
setUpView();
}
private void setUpView() {
mWebView = (WebView) findViewById(R.id.item_tnc_dialog_webview);
btnClose = (TextView) findViewById(R.id.item_tnc_dialog_close);
btnAgree = (TextView) findViewById(R.id.item_tnc_dialog_agree);
btnDisagree = (TextView) findViewById(R.id.item_tnc_dialog_disagree);
btnClose.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
dismiss();
}
});
btnDisagree.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
System.exit(0);
}
});
btnAgree.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getContext(), "YOU SELECTED AGREE",
Toast.LENGTH_SHORT).show();
dismiss();
}
});
showDialog();
}
/** 加载webview的内容 */
public void showDialog() {
String localHtml = "file:///android_asset/los.html";
if (mWebView != null) {
mWebView.getSettings().setDefaultTextEncodingName("utf-8");
mWebView.loadUrl(localHtml);
}
buttonsDisplayTwo(false);
}
/** 当true的时候,出现同意和不同意两个选项,反之是关闭选项 */
private void buttonsDisplayTwo(boolean two) {
btnAgree.setVisibility(two ? View.VISIBLE : View.GONE);
btnDisagree.setVisibility(two ? View.VISIBLE : View.GONE);
btnClose.setVisibility(two ? View.GONE : View.VISIBLE);
}
3.main.activity的代码就不写了。。直接写自定义的dialog代码
private TextView btnClose = null;
private TextView btnAgree = null;
private TextView btnDisagree = null;
private WebView mWebView = null;
public MyDialog(Context context) {
super(context, R.style.item_tnc_dialog);
setCancelable(false); // 阻止返回键的响应
setContentView(R.layout.dialog_view);
getWindow().setLayout(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT);
setUpView();
}
private void setUpView() {
mWebView = (WebView) findViewById(R.id.item_tnc_dialog_webview);
btnClose = (TextView) findViewById(R.id.item_tnc_dialog_close);
btnAgree = (TextView) findViewById(R.id.item_tnc_dialog_agree);
btnDisagree = (TextView) findViewById(R.id.item_tnc_dialog_disagree);
btnClose.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
dismiss();
}
});
btnDisagree.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
System.exit(0);
}
});
btnAgree.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getContext(), "YOU SELECTED AGREE",
Toast.LENGTH_SHORT).show();
dismiss();
}
});
showDialog();
}
/** 加载webview的内容 */
public void showDialog() {
String localHtml = "file:///android_asset/los.html";
if (mWebView != null) {
mWebView.getSettings().setDefaultTextEncodingName("utf-8");
mWebView.loadUrl(localHtml);
}
buttonsDisplayTwo(false);
}
/** 当true的时候,出现同意和不同意两个选项,反之是关闭选项 */
private void buttonsDisplayTwo(boolean two) {
btnAgree.setVisibility(two ? View.VISIBLE : View.GONE);
btnDisagree.setVisibility(two ? View.VISIBLE : View.GONE);
btnClose.setVisibility(two ? View.GONE : View.VISIBLE);
}
效果图如下:


猜你喜欢
- 需求:有一个列表,列表中有一个edittext(只能输整形),外部有一个整形变量Int,每次改变列表中其中一项的edittext的值时,外部
- 一、安装JDK1.卸载旧版本或者系统自带的JDK(1)列出所有已安装的JDKrpm -qa | grep jdk(2)卸载不需要的JDKyu
- 前言本章内容主要研究一下java高级特性-反射、android注解、和 * 的使用,通过了解这些技术,可以为了以后实现组件化或者Api h
- TabControl控件中TabPage选项卡切换时的触发事件选项卡切换触发的是TabControl控件的SelectedIndexChan
- 在多线程处理问题时,无法通过@Autowired注入bean,报空指针异常,在线程中为了线程安全,是防注入的,如果要用到这个类,只能从bea
- 对象是使用new创建的,但是并没有与之相对应的delete操作来回收对象占用的内存。当我们完成对某个对象的使用时,只需停止对该对象的引用:将
- 1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有
- 最近一年的项目都是在使用Mybatis-plus,感觉挺好用的,也没遇到很多问题,但是在最近项目上线之后,遇到了一些新的需要,在进行新版本开
- 前言java有八个基本数据类型,每个都有对应的一个包装类,比如int对应的Integer。 Integer 是int的包装类型,数据类型是类
- 本文实例为大家分享了C#添加Windows服务的具体方法,供大家参考,具体内容如下源码下载地址:http://xiazai.jb51.net
- 一、开篇通过对之前Java之路的了解之后,相信初学者们都对Java有了一个比较深印象的了解了。但是事情不能总停留在理论层面,还得多多实现,才
- 本文实例为大家分享了javaOpenCV-4.0.0 实时人脸识别,供大家参考,具体内容如下package com.xu.opencv;im
- java parseInt()
- 先唠叨几句啊,由于公司 * 已经搭好了我就不费那劲琢磨搭建 * 的事了,直接开撸上传lib。下图是我放组件库的地方,本来想一个module拉出一
- 本文实例讲解了通知Notification使用方法,此知识点就是用作通知的显示,包括振动、灯光、声音等效果,分享给大家供大家参考,具体内容如
- 摘要:在spring boot中 MVC这部分也有默认自动配置,也就是说我们不用做任何配置,那么也是OK的,这个配置类就是 WebMvcAu
- 刚开始做开发学习的小伙伴可能在有一个知识上面有错误的认知,我们天天写程序是在Idea下写的,运行也是在Idea下运行的。但是实际开发完成后,
- 老规矩,先上图看效果。说明TextView的跑马灯效果也就是指当你只想让TextView单行显示,可是文本内容却又超过一行时,自动从左往右慢
- ViewModel的创建方式在我们项目中, 引入了viewModel 做MVI 设计模式的组成部分,它是JetPack 组件库中的重要成员。
- 本文实例讲述了C#判断访问来源是否为搜索引擎链接的方法。分享给大家供大家参考。具体分析如下:这段代码通过获取UrlReferrer判断访客是