AlertDialog

  • 默认样式
  • 单选样式
  • 多选样式
  • 自定义样式

效果图

 
AlertDialog效果图
class OnClick implements View.OnClickListener {
@Override
public void onClick(View v) { switch (v.getId()) {
case R.id.btn_dialog1:
AlertDialog.Builder builder = new AlertDialog.Builder(DialogActivity.this);
builder.setTitle("请回答").setMessage("你觉得课程如何")
.setIcon(R.drawable.user)
.setPositiveButton("棒", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ToastUtil.showShort(DialogActivity.this, "很诚实");
}
}).setNeutralButton("还行", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ToastUtil.showShort(DialogActivity.this, "再瞅瞅");
}
}).setNegativeButton("不好", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ToastUtil.showShort(DialogActivity.this, "睁眼说瞎话");
}
}).show();
break;
case R.id.btn_dialog2: final String[] array = new String[]{"男", "女"};
AlertDialog.Builder builder1 = new AlertDialog.Builder(DialogActivity.this);
builder1.setTitle("选择性别").setItems(array, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ToastUtil.showLong(DialogActivity.this, array[which]);
}
}).show(); break;
case R.id.btn_dialog3: final String[] array3 = new String[]{"男", "女"};
AlertDialog.Builder builder3 = new AlertDialog.Builder(DialogActivity.this);
builder3.setTitle("选择性别").setSingleChoiceItems(array3, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ToastUtil.showLong(DialogActivity.this, array3[which]);
dialog.dismiss();
}
}).setCancelable(false).show();
break;
case R.id.btn_dialog4: final String[] array4 = new String[]{"唱歌", "跳舞", "写代码"};
boolean[] isSelected = new boolean[]{false, false, false};
AlertDialog.Builder builder4 = new AlertDialog.Builder(DialogActivity.this);
builder4.setTitle("选择兴趣").setMultiChoiceItems(array4, isSelected, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
ToastUtil.showLong(DialogActivity.this, array4[which] + ":" + isChecked);
}
}).setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
}).show();
break;
case R.id.btn_dialog5: AlertDialog.Builder builder5 = new AlertDialog.Builder(DialogActivity.this);
View view = LayoutInflater.from(DialogActivity.this).inflate(R.layout.layout_dialog, null);
EditText etUserName = view.findViewById(R.id.et_username);
EditText etPassWord = view.findViewById(R.id.et_password);
Button button = view.findViewById(R.id.et_login);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { }
});
builder5.setTitle("请先登录").setView(view).show();
break;
}
}
}

自定义样式layout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"> <EditText
android:id="@+id/et_username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="username"
android:maxLines="1"/> <EditText
android:id="@+id/et_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="password"
android:inputType="textPassword"
android:maxLines="1"/> <Button
android:id="@+id/et_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="login"
android:textAllCaps="false"
android:layout_marginTop="10dp"/> </LinearLayout>

Progress

 
Progress效果图

代码

activity_progress.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ProgressActivity"
android:orientation="vertical"
android:gravity="center_horizontal"> <ProgressBar
android:id="@+id/pb1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/> <ProgressBar
android:id="@+id/pb2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@android:style/Widget.ProgressBar"/> <ProgressBar
android:id="@+id/pb3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@android:style/Widget.ProgressBar.Horizontal"
android:progress="40"
android:max="200"
android:secondaryProgress="80"
/> <ProgressBar
android:id="@+id/pb4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@android:style/Widget.Material.ProgressBar.Horizontal"
android:progress="40"
android:max="200"
android:secondaryProgress="80"
/> <Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="40dp"
android:text="点击"/> <ProgressBar
android:id="@+id/pb5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/MyProgressBar"
android:layout_marginTop="10dp"
/>
<!-- android:indeterminateDrawable="@drawable/bg_progress"--> <Button
android:id="@+id/btn_progress_dialog1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAllCaps="false"
android:layout_marginTop="10dp"
android:text="ProgressDialog1"/> <Button
android:id="@+id/btn_progress_dialog2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAllCaps="false"
android:layout_marginTop="10dp"
android:text="ProgressDialog2"/>
</LinearLayout>

ProgressActivity

public class ProgressActivity extends AppCompatActivity {

    private ProgressBar mPb3;
private Button pbBtn, mBtnProgressDialog1, mBtnProgressDialog2; @SuppressLint("WrongViewCast")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_progress);
mPb3 = findViewById(R.id.pb3);
mPb3.setProgress(90); mBtnProgressDialog1 = findViewById(R.id.btn_progress_dialog1);
mBtnProgressDialog2 = findViewById(R.id.btn_progress_dialog2); pbBtn = findViewById(R.id.btn);
pbBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
handler.sendEmptyMessage(0);
}
});
mBtnProgressDialog1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ProgressDialog progressDialog = new ProgressDialog(ProgressActivity.this);
progressDialog.setTitle("提示");
progressDialog.setMessage("正在加载");
progressDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
ToastUtil.showLong(ProgressActivity.this, "cancel");
}
});
progressDialog.setCancelable(false);
progressDialog.show();
}
}); mBtnProgressDialog2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ProgressDialog progressDialog = new ProgressDialog(ProgressActivity.this);
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setTitle("提示");
progressDialog.setMessage("正在下载...");
progressDialog.setButton(BUTTON_POSITIVE, "棒", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) { }
});
progressDialog.show();
}
});
} @SuppressLint("HandlerLeak")
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (mPb3.getProgress() < 200) {
handler.postDelayed(runnable, 500);
}else {
ToastUtil.showShort(ProgressActivity.this, "加载完成");
}
}
}; Runnable runnable = new Runnable() {
@Override
public void run() {
mPb3.setProgress(mPb3.getProgress() + 5);
handler.sendEmptyMessage(0);
}
};
}

自定义Dialog

 
自定义Dialog

layout_custom_dialog.xml


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:background="@drawable/bg_custom_dialog"
> <TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:textColor="@color/colorBlack"
android:text="提示"
android:textStyle="bold"
android:layout_marginTop="20dp"
/> <TextView
android:id="@+id/tv_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:textColor="@color/colorBlack"
android:text="删除?"
android:layout_marginTop="20dp"
android:layout_marginBottom="20dp"
/> <View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="@color/colorGray"/> <LinearLayout
android:layout_width="match_parent"
android:layout_height="45dp"
android:orientation="horizontal"> <TextView
android:id="@+id/tv_cancel"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:textSize="20sp"
android:text="取消"
android:textColor="#11c2ee"
android:gravity="center"
/> <View
android:layout_width="0.5dp"
android:layout_height="match_parent"
android:background="@color/colorGray"/> <TextView
android:id="@+id/tv_confirm"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:textSize="20sp"
android:text="确定"
android:textColor="#000"
android:gravity="center"
/> </LinearLayout> </LinearLayout>

CustomDialogActivity

public class CustomDialogActivity extends AppCompatActivity {

    private Button mBtnDialog;

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_custom_dialog);
mBtnDialog = findViewById(R.id.btn_custom_dialog);
mBtnDialog.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { CustomDialog customDialog = new CustomDialog(CustomDialogActivity.this, R.style.CustomDialog);
customDialog.setTitle("提示").setMessage("确认删除此项?").setCancel("取消",new CustomDialog.IOnCancelListener() {
@Override
public void onCancel(CustomDialog dialog) { }
}).setConfirm("确定1",new CustomDialog.IOnConfirmListener() {
@Override
public void onConfirm(CustomDialog dialog) { }
}).show();
}
});
}
}

activity_dialog_activity.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".CustomDialogActivity"> <Button
android:id="@+id/btn_custom_dialog"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="自定义dialog"
android:textAllCaps="false"
/> </LinearLayout>

CustomDialog Style


<style name="CustomDialog"
parent="@android:style/Theme.Dialog">
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowBackground">@color/colorAccent</item>
</style>

Android开发-AlertDialog,Progress,ProgressDialog,自定义layout的更多相关文章

  1. [Android开发学iOS系列] Auto Layout

    [Android开发学iOS系列] Auto Layout 内容: 介绍什么是Auto Layout. 基本使用方法 在代码中写约束的方法 Auto Layout的原理 尺寸和优先级 Auto Lay ...

  2. Android开发学习之路-自定义ListView(继承BaseAdapter)

    大三学生一个,喜欢编程,喜欢谷歌,喜欢Android,所以选择的方向自然是Android应用开发,开博第一篇,希望以后会有更多的进步. 最近在做一个记账App的时候,需要一个Activity来显示每个 ...

  3. android 开发AlertDialog.builder对话框的实现

    AndroidAPI提供了Dialog对话框控件,但google明确指出不建议开发者只是使用Dialog来创建对话框,而应该自定义对话框或者使用API中提供的Dialog的子类,如AlertDialo ...

  4. Android开发手记(8) ProgressDialog的使用

    ProgressDialog,进度对话框.一般有两种,一种是圆形的进度条(ProgressDialog.STYLE_SPINNER),另一种是长条形的进度条(ProgressDialog.STYLE_ ...

  5. Android之alertDialog、ProgressDialog

    一.alertDialog 置顶于所有控件之上的,可以屏蔽其他控件的交互能力.通过AlertDialog.Builder创建一个AlertDialog,并通过setTittle(),setMesseg ...

  6. Android开发(二)——自定义圆形控件的使用CircleImageView

    CircleImageView,a fast circular ImageView perfect for profile images. 主要的类CircleImageView: package d ...

  7. Android开发AlertDialog解析

    打开源码,首先映入眼帘的是三个构造方法,但这三个构造方法都是protected类型的, 可见,不允许我们直接实例化AlertDialog. 因此,我们再看别的有没有方法.可以实例化 再仔细一看,发现一 ...

  8. android 开发 View _7_ 动态自定义View

    效果图: 代码: package com.example.lenovo.mydemo.myViewDemo; import android.content.Context; import androi ...

  9. android 开发 View _1_ View的子类们 和 视图坐标系图

    目录: android 开发 View _2_ View的属性动画ObjectAnimator ,动画效果一览 android 开发 View _3_ View的属性动画ValueAnimator a ...

随机推荐

  1. ImageMagick:用identify检查图片是否完整?(jpg/gif/png图片是否损坏)

    一,常用图片格式的结束标志是什么? 1,Jpg格式的文件在16进制中的表示是以 ff d9 两个字节结尾 2,  gif格式的文件,结尾是 3b 3,  png格式的文件,结尾是  00 00 00 ...

  2. http请求需要了解的一些信息

    http请求需要了解的一些信息 http请求头:https://jingyan.baidu.com/article/375c8e19770f0e25f2a22900.htmlhttp状态码 :http ...

  3. 类型“DbContext”在未引用的程序集中定义。必须添加对程序及“EntityFramework,Version=6.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”的引用。using语句中使用的类型必须可隐式转换为”System.IDisposable

    其他层引用Model层的ef模型时会发生这个错误 解决方法: 在你要使用EF模型的层下点击添加引用 然后点击浏览   找到Model层文件下的bin>debug文件   引用这两个dll文件 如 ...

  4. linux环境下protobuf安装

    1. 到GitHub下载源码,执行解压命令后,进入解压后的目录 2. 执行./autogen,生成configure 3. 执行./configure --prefix=/usr/local/,pro ...

  5. linux 卸载 umount 提示device is busy

    思路:先杀掉挂载的目录(如:/usr1/)这个进程 fuser -v /usr1/ 再卸载

  6. pyqt5安装报错解决办法

    用国内快速的镜像源即可 pip install PyQt5 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

  7. js工厂函数

    经常会遇到工厂函数这个词,不过javascript不是严格的面向对象语言,不像java,C#拥有类,所以工厂函数会变得比较模糊. 简单来讲,就是创建一个可以用来创建实例的函数,这样每一个实例都是独立的 ...

  8. python之冒泡排序改进

    冒泡排序改进 关注公众号"轻松学编程"了解更多. 一.普通冒泡排序 [22,3,1,6,7,8,2,5] 普通冒泡排序 思路: 第一趟排序 从下标0开始,取出对应的值22 22和3 ...

  9. python框架Django中的MTV架构

    MTV架构 关注公众号"轻松学编程"了解更多. ​ 通过V对M和T进行连接,用户通过T(界面)对服务器进行访问(发送请求),T把请求传给V(调度),V调用M(数据模型)获取数据,把 ...

  10. 水题挑战4: luogu P1280 尼克的任务

    题目描述 尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些邮件包含了尼克主管的部门当天要完成的全部任务,每个任务由一个开始时刻与一个持续时间构成. 尼克的一个工作日为 \(n\) 分钟,从 ...