用来做区位分析的地图网站,网站怎么做才吸引人,宣传片制作公司排行,seo推广培训学费Android 基本Dialog和自定义DialogDialog类是对话框的基类#xff0c;但你应该避免直接实例化Dialog ,可以使用子类1.AlertDialog 此对话框可以显示标题#xff0c;最多三个按钮#xff0c;可选择列表或自定义布局View.2.DatePickerDialog或TimePickerDialog 此对话框带有允…Android 基本Dialog和自定义DialogDialog类是对话框的基类但你应该避免直接实例化Dialog ,可以使用子类1.AlertDialog 此对话框可以显示标题最多三个按钮可选择列表或自定义布局View.2.DatePickerDialog或TimePickerDialog 此对话框带有允许用户选择日期或时间的预定义布局3.注意Android 包含另一种名为 ProgressDialog 的对话框类该类可显示带有进度条的对话框。此微件已弃用因为它会在显示进度的情况下阻止用户与应用互动。如果需要指示加载进度或不确定的进度您应遵循进度和 Activity的设计准则并在布局中使用ProgressBar而非 ProgressDialog。一创建AlertDialog1.创建构造器AlertDialog.Builder的对象2.通过构造器对象调用setTitle、setMessage、setIcon等方法构造对话框的标题、信息和图标等内容3.根据需要调用setPositive/Negative/NeutralButton()方法设置正面按钮、负面按钮和中立按钮4.调用构造器对象的create方法创建AlertDialog对象5.AlertDialog对象调用show方法让对话框在界面上显示。注AlertDialog.Builder自己也有一个show方法可以显示对话框所以上面的第4、第5步可以简化为一步二创建两个显示2个按钮的Dialog?xml version1.0 encodingutf-8?android:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:orientationverticalandroid:idid/btn_twoandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:text最普通的 dialogandroid:textAllCapsfalse /android:idid/btn_threeandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:text三个按钮的 dialogandroid:textAllCapsfalse /android:idid/btn_listandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:text列表 dialogandroid:textAllCapsfalse /android:idid/btn_multi_selectandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:text多选 dialogandroid:textAllCapsfalse /android:idid/btn_single_selectandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:text单选 dialogandroid:textAllCapsfalse /android:idid/btn_waitingandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:text等待 dialogandroid:textAllCapsfalse /android:idid/btn_loadingandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:text加载 dialogandroid:textAllCapsfalse /android:idid/btn_inputandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:text输入 dialogandroid:textAllCapsfalse /android:idid/btn_my_styleandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:text自定义 dialogandroid:textAllCapsfalse /FristActivity中创建显示2个按钮dialogprivate AlertDialog.Builder builder;/*** 显示两个按钮*/private void showTwo() {builder new AlertDialog.Builder(this).setIcon(R.mipmap.ic_launcher).setTitle(两个按钮的dialog).setMessage(我是两个按钮的dialog内容).setCancelable(true)//点击对话框以外的区域是否让对话框消失.setPositiveButton(确定, new DialogInterface.OnClickListener() {Overridepublic void onClick(DialogInterface dialogInterface, int i) {//ToDo: 你想做的事情Toast.makeText(FirstActivity.this, 确定按钮, Toast.LENGTH_LONG).show();}}).setNegativeButton(取消, new DialogInterface.OnClickListener() {Overridepublic void onClick(DialogInterface dialogInterface, int i) {//ToDo: 你想做的事情Toast.makeText(FirstActivity.this, 关闭按钮, Toast.LENGTH_LONG).show();// dialogInterface.dismiss();}});builder.create().show();}效果三三个按钮的Dialogprivate void showThree() {/*** 三个按钮的 dialog*/AlertDialog.Builder builder new AlertDialog.Builder(this);builder.setIcon(R.mipmap.ic_launcher).setTitle(三个按钮dialog标题).setMessage(三个按钮dialog内容).setPositiveButton(确定(积极), new DialogInterface.OnClickListener() {Overridepublic void onClick(DialogInterface dialogInterface, int i) {//ToDo: 你想做的事情Toast.makeText(FirstActivity.this, 确定按钮, Toast.LENGTH_LONG).show();}}).setNeutralButton(你猜(中立), new DialogInterface.OnClickListener() {Overridepublic void onClick(DialogInterface dialogInterface, int i) {Toast.makeText(FirstActivity.this, 你猜按钮, Toast.LENGTH_LONG).show();}}).setNegativeButton(取消(消极), new DialogInterface.OnClickListener() {Overridepublic void onClick(DialogInterface dialogInterface, int i) {//ToDo: 你想做的事情Toast.makeText(FirstActivity.this, 关闭按钮, Toast.LENGTH_LONG).show();dialogInterface.dismiss();}});AlertDialog dialogbuilder.create();//对话框消失的监听事件dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {Overridepublic void onCancel(DialogInterface dialog) {Log.e(TAG,对话框消失了);}});//对话框显示的监听事件dialog.setOnShowListener(new DialogInterface.OnShowListener() {Overridepublic void onShow(DialogInterface dialog) {Log.e(TAG,对话框显示了);}});//显示对话框dialog.show();}我们对Dialog 监听dialog 是否显示dialog.setOnShowListener 和 dialog.setOnCancelListener// E/TAG: 对话框显示了四列表选择Item Dialog/*** 列表单选选择 dialog*/int checkedItem 0;private void showList() {//默认选中的itemfinal String[] items {西湖区, 江干区, 上城区, 下城区, 拱墅区, 滨江区, 萧山区};builder new AlertDialog.Builder(this).setIcon(R.mipmap.ic_launcher).setTitle(列表选择dialog).setCancelable(false).setSingleChoiceItems(items,checkedItem, new DialogInterface.OnClickListener() {Overridepublic void onClick(DialogInterface dialogInterface, int i) {checkedItemi;Toast.makeText(FirstActivity.this, 你点击的内容为 items[i], Toast.LENGTH_LONG).show();}});builder.setPositiveButton(确认, new DialogInterface.OnClickListener() {Overridepublic void onClick(DialogInterface dialog, int which) {}}).setNegativeButton(取消, new DialogInterface.OnClickListener() {Overridepublic void onClick(DialogInterface dialog, int which) {}});builder.create().show();}效果五多选列表Dialogprivate void showMultiSelect() {final List choice new ArrayList();final String[] items {多选1, 多选2, 多选3, 多选4, 多选5, 多选6};//默认都未选中boolean[] isSelect {false, false, false, false, false, false};builder new AlertDialog.Builder(this).setIcon(R.mipmap.ic_launcher).setTitle(多选dialog).setMultiChoiceItems(items, isSelect, new DialogInterface.OnMultiChoiceClickListener() {Overridepublic void onClick(DialogInterface dialogInterface, int i, boolean b) {if (b) {choice.add(i);} else {choice.remove(choice.indexOf(i));}}}).setPositiveButton(确定, new DialogInterface.OnClickListener() {Overridepublic void onClick(DialogInterface dialogInterface, int i) {StringBuilder str new StringBuilder();for (int j 0; j choice.size(); j) {str.append(items[choice.get(j)]);}Toast.makeText(FirstActivity.this, 你选择了 str,Toast.LENGTH_LONG).show();}});builder.create().show();}效果六显示进度条的Dialog/**显示进度条的Dialog*/private void showLoading() {final int MAX_VALUE 100;progressDialog new ProgressDialog(this);progressDialog.setProgress(0);progressDialog.setTitle(带有加载进度dialog);progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);progressDialog.setMax(MAX_VALUE);progressDialog.show();new Thread(new Runnable() {Overridepublic void run() {int progress 0;while (progress MAX_VALUE) {try {Thread.sleep(100);progress;progressDialog.setProgress(progress);} catch (InterruptedException e) {e.printStackTrace();}}//加载完毕自动关闭dialogprogressDialog.cancel();}}).start();}//这种会阻碍用户的交互现在使用ProgressBar七自定义View的Dialogprivate void showMyStyle() {AlertDialog.Builder builder new AlertDialog.Builder(this);final AlertDialog dialog builder.create();View dialogView View.inflate(this, R.layout.dialog_login, null);//设置对话框布局dialog.setView(dialogView);EditText etName (EditText) dialogView.findViewById(R.id.et_name);EditText etPwd (EditText) dialogView.findViewById(R.id.et_pwd);Button btnLogin (Button) dialogView.findViewById(R.id.btn_login);Button btnCancel (Button) dialogView.findViewById(R.id.btn_cancel);btnLogin.setOnClickListener(new View.OnClickListener() {Overridepublic void onClick(View v) {final String name etName.getText().toString();final String pwd etPwd.getText().toString();if (TextUtils.isEmpty(name) TextUtils.isEmpty(pwd)) {Toast.makeText(FirstActivity.this, 用户名和密码均不能为空, Toast.LENGTH_SHORT).show();return; }Log.e(TAG, 用户名 name);Log.e(TAG, 密码 pwd);dialog.dismiss();}});btnCancel.setOnClickListener(new View.OnClickListener() {Overridepublic void onClick(View v) {dialog.dismiss();}});dialog.show();}对应的布局文件?xml version1.0 encodingutf-8?android:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:orientationverticalandroid:layout_widthmatch_parentandroid:layout_height50dpandroid:background#169ee5android:gravitycenterandroid:text请先登录android:textColorandroid:color/whiteandroid:textSize20sp /android:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:hint请输入你的账户名称android:textSize18sp /android:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:hint请输入你的密码android:textSize18sp /android:layout_heightwrap_contentandroid:layout_marginBottom5dpandroid:orientationhorizontalandroid:paddingLeft5dpandroid:paddingRight5dpandroid:idid/btn_cancelandroid:layout_width0dpandroid:layout_heightwrap_contentandroid:layout_marginRight10dpandroid:layout_weight1android:background#169ee5android:text取消android:textColorandroid:color/whiteandroid:textSize16sp /android:layout_width0dpandroid:layout_heightwrap_contentandroid:layout_weight1android:background#169ee5android:text登录android:textColorandroid:color/whiteandroid:textSize16sp /效果点击确认后E/TAG: 用户名adminE/TAG: 密码admin自定义对话框需要注意的问题系统dialog的宽度默认是固定的即使你自定义布局怎么修改宽度也不起作用高度可根据布局自动调节。如果想修改弹出窗体大小可以使用下面这段代码来实现改变对话框的宽高。这段代码必dialog.show()方法之后调用才有效。AlertDialog.Builder builder new AlertDialog.Builder(this);final AlertDialog dialog builder.setCancelable(false).create();View dialogView View.inflate(this, R.layout.dialog_login, null);//设置对话框布局dialog.setView(dialogView);dialog.show();dialog.getWindow().setLayout(ScreenUtils.getScreenWidth(this)/2,LinearLayout.LayoutParams.WRAP_CONTENT);//通过此方式来设置dialog 的宽高屏幕工具类public class ScreenUtils {/*** 获取屏幕高度(px)*/ public static int getScreenHeight(Context context) {return context.getResources().getDisplayMetrics().heightPixels;}/*** 获取屏幕宽度(px)*/ public static int getScreenWidth(Context context) {return context.getResources().getDisplayMetrics().widthPixels;}}改变Android Dialog 弹出后的Activity背景亮度在代码中修改lp.alpha大小值的大小可根据自己要求设置// 设置屏幕背景变暗private void setScreenBgDarken() {WindowManager.LayoutParams lp getWindow().getAttributes();lp.alpha 0.5f;lp.dimAmount 0.5f;getWindow().setAttributes(lp);}// 设置屏幕背景变亮private void setScreenBgLight() {WindowManager.LayoutParams lp getWindow().getAttributes();lp.alpha 1.0f;lp.dimAmount 1.0f;getWindow().setAttributes(lp);}控制弹窗弹出的位置一般都是在屏幕正中间弹出默认但可以控制从别的地方弹出比如从底部弹出private void popFromBottom(Dialog dialog) {Window win dialog.getWindow();win.setGravity(Gravity.BOTTOM); // 这里控制弹出的位置win.getDecorView().setPadding(0, 0, 0, 0);WindowManager.LayoutParams lp win.getAttributes();lp.width WindowManager.LayoutParams.MATCH_PARENT;lp.height WindowManager.LayoutParams.WRAP_CONTENT;// dialog.getWindow().setBackgroundDrawable(null);//这是设置window背景为空win.setAttributes(lp);}八TimePickerDialog使用同日期选择器一样时间选择器也有普通控件和弹框控件两种方式而且实际开发中也是很少用普通控件(TimePicker),而是常用封装好的TimePickerDialog该对话框的用法类似于DatePickerDialog不同之处有两个(1)构造函数传的是当前的小时与分钟最后一个参数表示是否采用二十四小时制一般传true表示小时数范围0~23(2)时间选择监听器是OnTimeSetListenser对应需要实现的方法是onTimeSet在该方法中可以获得用户选好的小时和分钟/**时间选择Dialog*/private void showMyTime() {//获取日历的一个实例里面包含了当前的时分秒Calendar calendarCalendar.getInstance();//构建一个时间对话框该对话框已经集成了时间选择器//TimePickerDialog的第二个构造参数指定了事件监听器TimePickerDialog dialognew TimePickerDialog(this,this,calendar.get(Calendar.HOUR_OF_DAY),calendar.get(Calendar.MINUTE),true);//true表示使用二十四小时制第一个是Context,第二个参数监听TimePickerDialog.OnTimeSetListener//把时间对话框显示在界面上dialog.show();}实现接口TimePickerDialog.OnTimeSetListenerpublic class FirstActivity extends AppCompatActivity implements TimePickerDialog.OnTimeSetListener {Overridepublic void onTimeSet(TimePicker view, int hourOfDay, int minute) {//获取时间对话框设定的小时和分钟数String descString.format(您选择的时间是%d时%d分,hourOfDay,minute);Toast.makeText(FirstActivity.this, desc, Toast.LENGTH_LONG).show();}}效果九DatePickerDialog 使用private void showMyDate() {//获取日历的一个实例里面包含了当前的年月日Calendar calendarCalendar.getInstance();//构建一个日期对话框该对话框已经集成了日期选择器//DatePickerDialog的第二个构造参数指定了日期监听器DatePickerDialog dialognew DatePickerDialog(this,this,calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH));//把日期对话框显示在界面上dialog.show();}实现接口DatePickerDialog.OnDateSetListenerpublic class FirstActivity extends AppCompatActivity implements DatePickerDialog.OnDateSetListener {Overridepublic void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {//获取日期对话框设定的年月份String descString.format(您选择的日期是%d年%d月%d日,year,month1,dayOfMonth);Toast.makeText(FirstActivity.this, desc, Toast.LENGTH_LONG).show();}}效果十完全自定义Dialog使用继承Dialog 实现dialog功能public class LovelyAlertDialog extends Dialog {protected LinearLayout dialogRoot;protected Context mContext;public LovelyAlertDialog(NonNull Builder builder) {super(builder.mContext);dialogRoot (LinearLayout) builder.view;mContext builder.mContext;}Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(dialogRoot);setCanceledOnTouchOutside(true);}public static class Builder {protected Context mContext;private View view;private TextView contentTitle;//信息标题private TextView contentMsg;//信息内容protected TextView btnCancel;//取消protected TextView btnConfirm;//确认DialogInterface.OnClickListener onCancelClickListener;public Builder(Context context) {this.mContext context;}public Builder getView(int resView) {view LayoutInflater.from(mContext).inflate(resView, null);return this;}/*** 设置弹窗标题*/public final Builder setTitle(int viewRes, String title) {contentTitle view.findViewById(viewRes);if (StringUtils.isTrimEmpty(title)) {contentTitle.setVisibility(View.GONE);} else {contentTitle.setVisibility(View.VISIBLE);contentTitle.setText(title);}return this;}/**设置确认按钮监听*/public final Builder setOnConfirmClickListener(int viewRes, String contentConfirmBtn, View.OnClickListener onConfirmClickListener) {btnConfirmview.findViewById(viewRes);if (StringUtils.isTrimEmpty(contentConfirmBtn)){btnConfirm.setText(确认);}else {btnConfirm.setText(contentConfirmBtn);}if (onConfirmClickListener!null){btnConfirm.setOnClickListener(onConfirmClickListener);}return this;}/**设置取消按钮监听*/public final Builder setOnCancelClickListener(int viewRes, String contentCancelBtn, OnClickListener onCancelClickListener) {btnCancelview.findViewById(viewRes);if (StringUtils.isTrimEmpty(contentCancelBtn)){btnCancel.setText(取消);}else {btnCancel.setText(contentCancelBtn);}if (onCancelClickListener!null){this.onCancelClickListeneronCancelClickListener;btnCancel.setOnClickListener(v - {onCancelClickListener.onClick(new LovelyAlertDialog(this),-2);});}return this;}public LovelyAlertDialog create() {LovelyAlertDialog dialog new LovelyAlertDialog(this);return dialog;}END:学道之难难于上青天