Android入门第九篇之AlertDialog
16lz
2021-01-23
时隔一年,又要准备做Android的开发了,最近复习和整理一下Android的知识。 这次要说的是AlertDialog,这种对话框会经常遇到。AlertDialog跟WIN32开发中的Dialog不一样,AlertDialog是非阻塞的,而阻塞的对话框用的是PopupWindow。
main.xml的源码:
view plain copy to clipboard print ?
- <? xml version = "1.0" encoding = "utf-8" ?>
- < LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
- android:orientation = "vertical"
- android:layout_width = "fill_parent"
- android:layout_height = "fill_parent"
- >
- < Button android:id = "@+id/Button01" android:layout_height = "wrap_content" android:text = "非Layout型对话框" android:layout_width = "fill_parent" > </ Button >
- < Button android:id = "@+id/Button02" android:layout_height = "wrap_content" android:text = "Layout型对话框" android:layout_width = "fill_parent" > </ Button > < View android:id = "@+id/View01" android:layout_width = "wrap_content" android:layout_height = "wrap_content" > </ View >
- </ LinearLayout >
下图是非Layout型对话框,直接使用AlertDialog
下图是使用了Layout的对话框,可以自定义控件,实现更复杂的对话框
dialoglayout.xml的源码:
view plain copy to clipboard print ?
- <? xml version = "1.0" encoding = "utf-8" ?>
- < LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
- android:layout_width = "fill_parent" android:layout_height = "wrap_content"
- android:orientation = "vertical" >
- < EditText android:layout_height = "wrap_content"
- android:layout_width = "fill_parent" android:layout_marginLeft = "20dip"
- android:layout_marginRight = "20dip" android:textAppearance = "?android:attr/textAppearanceMedium" android:id = "@+id/edtInput" />
- </ LinearLayout >
程序源码:
view plain copy to clipboard print ?
- package com.testAlertDialog;
- import android.app.Activity;
- import android.app.AlertDialog;
- import android.content.Context;
- import android.content.DialogInterface;
- import android.os.Bundle;
- import android.view.Gravity;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.PopupWindow;
- public class testAlertDialog extends Activity{
- ButtonbtnShowDialog;
- ButtonbtnShowDialog_Layout;
- /**Calledwhentheactivityisfirstcreated.*/
- @Override
- public void onCreate(BundlesavedInstanceState){
- super .onCreate(savedInstanceState);
- setContentView(R.layout.main);
- //定义按钮
- btnShowDialog=(Button)this .findViewById(R.id.Button01);
- btnShowDialog.setOnClickListener(new ClickEvent());
- btnShowDialog_Layout=(Button)this .findViewById(R.id.Button02);
- btnShowDialog_Layout.setOnClickListener(new ClickEvent());
- }
- //统一处理按键事件
- class ClickEvent implements OnClickListener{
- @Override
- public void onClick(Viewv){
- //TODOAuto-generatedmethodstub
- if (v==btnShowDialog)
- showDialog(testAlertDialog.this );
- else if (v==btnShowDialog_Layout)
- showDialog_Layout(testAlertDialog.this );
- }
- }
- //显示基本的AlertDialog
- private void showDialog(Contextcontext){
- AlertDialog.Builderbuilder=new AlertDialog.Builder(context);
- builder.setIcon(R.drawable.icon);
- builder.setTitle("Title" );
- builder.setMessage("Message" );
- builder.setPositiveButton("Button1" ,
- new DialogInterface.OnClickListener(){
- public void onClick(DialogInterfacedialog, int whichButton){
- setTitle("点击了对话框上的Button1" );
- }
- });
- builder.setNeutralButton("Button2" ,
- new DialogInterface.OnClickListener(){
- public void onClick(DialogInterfacedialog, int whichButton){
- setTitle("点击了对话框上的Button2" );
- }
- });
- builder.setNegativeButton("Button3" ,
- new DialogInterface.OnClickListener(){
- public void onClick(DialogInterfacedialog, int whichButton){
- setTitle("点击了对话框上的Button3" );
- }
- });
- builder.show();
- }
- //显示基于Layout的AlertDialog
- private void showDialog_Layout(Contextcontext){
- LayoutInflaterinflater=LayoutInflater.from(this );
- final ViewtextEntryView=inflater.inflate(
- R.layout.dialoglayout,null );
- final EditTextedtInput=(EditText)textEntryView.findViewById(R.id.edtInput);
- final AlertDialog.Builderbuilder= new AlertDialog.Builder(context);
- builder.setCancelable(false );
- builder.setIcon(R.drawable.icon);
- builder.setTitle("Title" );
- builder.setView(textEntryView);
- builder.setPositiveButton("确认" ,
- new DialogInterface.OnClickListener(){
- public void onClick(DialogInterfacedialog, int whichButton){
- setTitle(edtInput.getText());
- }
- });
- builder.setNegativeButton("取消" ,
- new DialogInterface.OnClickListener(){
- public void onClick(DialogInterfacedialog, int whichButton){
- setTitle("" );
- }
- });
- builder.show();
- }
- }
更多相关文章
- 基于源码分析 Android View 绘制机制
- Camera源码分析(android2.2)
- Android Contacts 联系人源码分析
- android应用市场、社区客户端、漫画App、TensorFlow Demo、歌词
- android流式布局、待办事项应用、贝塞尔曲线、MVP+Rxjava+Retrof
- 如何导入android sdk 的 sample中的源码
- Volley 源码解析
- 利用半透明对话框实现android运行时的提示界面
- Retrofit源码全方面解析