Android Dialog 學習匯總
一、界面效果
運行界面

---------------------------------------------------------------------------------------
部分效果
自定義登錄對話框

圓形(轉圈)進度條

長形進度條

多選按鈕對話框

單選按鈕對話框

帶多個按鈕的提示對話框

帶確定取消按鈕的提示對話框

---------------------------------------------------------------------------------------------------------
二、知識點
1 AlertDialog.Builder屬性
* setTitle: 為對話框設置標題 ;
* setIcon : 為對話框設置圖標;
* setMessage: 為對話框設置內容;
* setView : 給對話框設置自定義樣式 ;
* setItems: 設置對話框要顯示的一個list,一般用于顯示幾個命令時;
* setMultiChoiceItems:用來設置對話框顯示一系列的復選框;
* setNeutralButton : 響應中立行為的點擊;
* setPositiveButton : 響應Yes/Ok的點擊 ;
* setNegativeButton :響應No/Cancel的點擊 ;
* create : 創建對話框 ;
* show : 顯示對話框;
2 ProgressDialog屬性
*setProgressStyle: 設置進度條風格,風格為圓形,旋轉的;
*setTitlt: 設置ProgressDialog 標題;
*setMessage: 設置ProgressDialog提示信息;
*setIcon: 設置ProgressDialog標題圖標;
*setIndeterminate: 設置ProgressDialog 的進度條是否不明確;
*setCancelable: 設置ProgressDialog 是否可以按返回鍵取消;
*setButton: 設置ProgressDialog 的一個Button(需要監聽Button事件);
*show: 顯示ProgressDialog。
-----------------------------------------------------------------------------------------
三、源碼
1 布局文件:dialog_demo.xml
<?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" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:paddingBottom="10dp"
android:paddingTop="8dp"
android:text="SkySeraph Android學習專題:Dialog"
android:textColor="#FFFF00"
android:textSize="15dp" >
</TextView>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical" >
<Button
android:id="@+id/dialg_demo_btn01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="簡單提示對話框"
android:textSize="12dp" />
<Button
android:id="@+id/dialg_demo_btn02"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="帶確定取消按鈕的提示對話框"
android:textSize="12dp" />
<Button
android:id="@+id/dialg_demo_btn03"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="帶多個按鈕的提示對話框"
android:textSize="12dp" />
<Button
android:id="@+id/dialg_demo_btn04"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="單選按鈕對話框"
android:textSize="12dp" />
<Button
android:id="@+id/dialg_demo_btn05"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="多選按鈕對話框"
android:textSize="12dp" />
<Button
android:id="@+id/dialg_demo_btn06"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="列表對話框"
android:textSize="12dp" />
<Button
android:id="@+id/dialg_demo_btn07"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="自定義對話框"
android:textSize="12dp"/>
<Button
android:id="@+id/dialg_demo_btn08"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="長形進度條"
android:textSize="12dp"/>
<Button
android:id="@+id/dialg_demo_btn09"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="圓形(轉圈)進度條"
android:textSize="12dp"/>
<Button
android:id="@+id/dialg_demo_btn10"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="..."
android:textSize="12dp" />
</LinearLayout>
</LinearLayout>2 java代碼:dialog_demo.javapublic class dialog_demo extends Activity
{
private static final int MAX_PROGRESS = 100; //進度條最大數
private ProgressDialog mProgressDialog = null; //進度條
final String[] m_Items = {"Frist","Second","Third"};
int mSingleChoiceID = -1; //記錄單選中的ID
ArrayList <Integer>MultiChoiceID = new ArrayList <Integer>();//記錄多選選中的id號
// ////////////////////////////////////////////////////////////////////////////////////
@Override
protected void onCreate(Bundle savedInstanceState)
{
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_demo);
findViews();
}
// ////////////////////////////////////////////////////////////////////////////////////
private void findViews()
{
// //////////////////////////////////////////////////////////////////////////////
/* 【簡單提示對話框】 */
Button btn1 = (Button) findViewById(R.id.dialg_demo_btn01);
btn1.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
// TODO Auto-generated method stub
new AlertDialog.Builder(dialog_demo.this).setTitle("簡單提示對話框").setMessage("這是提示信息")
.show();
return;
}
});
// //////////////////////////////////////////////////////////////////////////////
/* 【帶確定取消按鈕的提示對話框】 */
Button btn2 = (Button) findViewById(R.id.dialg_demo_btn02);
btn2.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
// TODO Auto-generated method stub
AlertDialog.Builder dialog02 = new AlertDialog.Builder(dialog_demo.this);
dialog02.setTitle("帶確定取消按鈕的提示對話框");
dialog02.setIcon(R.drawable.qq);
dialog02.setMessage("這是提示內容");
dialog02.setPositiveButton("確定", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialoginterface, int which)
{
Toast.makeText(dialog_demo.this, "你選擇了確定", Toast.LENGTH_LONG).show();
}
});
dialog02.setNegativeButton("取消", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialoginterface, int which)
{
Toast.makeText(dialog_demo.this, "你選擇了取消", Toast.LENGTH_LONG).show();
}
});
dialog02.create().show();
return;
}
});
// //////////////////////////////////////////////////////////////////////////////
/* 【帶多個按鈕的提示對話框】 */
Button btn3 = (Button) findViewById(R.id.dialg_demo_btn03);
btn3.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
// TODO Auto-generated method stub
AlertDialog.Builder dialog03 = new AlertDialog.Builder(dialog_demo.this);
dialog03.setIcon(R.drawable.img1);
dialog03.setTitle("帶多個按鈕的提示對話框");
dialog03.setMessage("你最喜歡的球類運動是什么呢?");
dialog03.setPositiveButton("籃球", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialoginterface, int which)
{
showDialog("籃球很不錯");
}
});
dialog03.setNeutralButton("乒乓球", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialoginterface, int which)
{
showDialog("乒乓球很不錯");
}
});
dialog03.setNegativeButton("足球", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialoginterface, int which)
{
showDialog("足球很不錯");
}
});
dialog03.create().show();
return;
}
});
// //////////////////////////////////////////////////////////////////////////////
/*【單選按鈕對話框】*/
Button btn4 = (Button) findViewById(R.id.dialg_demo_btn04);
btn4.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
// TODO Auto-generated method stub
mSingleChoiceID = -1;
AlertDialog.Builder dialog04 = new AlertDialog.Builder(dialog_demo.this);
dialog04.setTitle("單選按妞");
dialog04.setSingleChoiceItems(m_Items, 0, new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton)
{
mSingleChoiceID = whichButton;
showDialog("你選擇的id為" + whichButton + " , " + m_Items[whichButton]);
}
});
dialog04.setPositiveButton("確定", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton)
{
if (mSingleChoiceID > 0)
{
showDialog("你選擇的是" + mSingleChoiceID);
}
}
});
dialog04.setNegativeButton("取消", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton)
{
}
});
dialog04.create().show();
return;
}
});
// //////////////////////////////////////////////////////////////////////////////
/*【多選按鈕對話框】*/
Button btn5 = (Button) findViewById(R.id.dialg_demo_btn05);
btn5.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
// TODO Auto-generated method stub
MultiChoiceID.clear();
AlertDialog.Builder dialog05 = new AlertDialog.Builder(dialog_demo.this);
dialog05.setTitle("多選按鈕");
dialog05.setMultiChoiceItems(m_Items, new boolean[]
{ false, false, false},
new DialogInterface.OnMultiChoiceClickListener()
{
public void onClick(DialogInterface dialog, int whichButton,
boolean isChecked)
{
if (isChecked)
{
MultiChoiceID.add(whichButton);
showDialog("你選擇的id為" + whichButton + " , "
+ m_Items[whichButton]);
} else
{
MultiChoiceID.remove(whichButton);
}
}
});
dialog05.create().show();
return;
}
});
// //////////////////////////////////////////////////////////////////////////////
/*【列表框對話框】*/
Button btn6 = (Button) findViewById(R.id.dialg_demo_btn06);
btn6.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
// TODO Auto-generated method stub
AlertDialog.Builder dialog06 = new AlertDialog.Builder(dialog_demo.this);
dialog06.setTitle("列表框");
dialog06.setItems(m_Items, new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
// 點擊后彈出窗口選擇了第幾項
showDialog("你選擇的id為" + which + " , " + m_Items[which]);
}
});
dialog06.create().show();
return;
}
});
// //////////////////////////////////////////////////////////////////////////////
/*【自定義登錄對話框】*/
Button btn7 = (Button) findViewById(R.id.dialg_demo_btn07);
btn7.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
// TODO Auto-generated method stub
LayoutInflater factory = LayoutInflater.from(dialog_demo.this);
final View view = factory.inflate(R.layout.dialog_demo_login, null);// 獲得自定義對話框
AlertDialog.Builder dialog07 = new AlertDialog.Builder(dialog_demo.this);
dialog07.setIcon(R.drawable.qq);
dialog07.setTitle("自定義登錄對話框");
dialog07.setView(view);
dialog07.setPositiveButton("確定", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton)
{
EditText userName = (EditText) view
.findViewById(R.id.dialog_demo_loginETUserName);
EditText password = (EditText) view
.findViewById(R.id.dialog_demo_loginETPassWord);
showDialog("姓名 :" + userName.getText().toString() + "密碼:"
+ password.getText().toString());
}
});
dialog07.setNegativeButton("取消", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton)
{
//Toast.makeText(dialog_demo.this, "你選擇了取消", Toast.LENGTH_LONG).show();
showDialog("你選擇了取消");
}
});
dialog07.create().show();
return;
}
});
// //////////////////////////////////////////////////////////////////////////////
Button btn8 = (Button) findViewById(R.id.dialg_demo_btn08);
btn8.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
// TODO Auto-generated method stub
mProgressDialog = new ProgressDialog(dialog_demo.this);//創建ProgressDialog對象
mProgressDialog.setIcon(R.drawable.qq);// 設置ProgressDialog標題 圖標
mProgressDialog.setTitle("進度條窗口");// 設置ProgressDialog標題
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//設置進度條風格,風格為長形
mProgressDialog.setMax(MAX_PROGRESS);// 設置ProgressDialo進度條進度
mProgressDialog.setButton("確定", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton)
{
// 這里添加點擊后的邏輯
}
});
mProgressDialog.setButton2("取消", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton)
{
// 這里添加點擊后的邏輯
}
});
mProgressDialog.show();
new Thread()
{
@Override
public void run()
{
int Progress = 0;
while (Progress < MAX_PROGRESS)
{
try
{
mProgressDialog.setProgress(Progress++);
//mProgressDialog.incrementProgressBy(1);
Thread.sleep(100);
} catch (Exception e)
{
// TODO Auto-generated catch block
mProgressDialog.cancel();
//e.printStackTrace();
}
}
};
}.start();
return;
}
});
// //////////////////////////////////////////////////////////////////////////////
/*【圓形(轉圈)進度條】*/
Button btn9 = (Button) findViewById(R.id.dialg_demo_btn09);
btn9.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
// TODO Auto-generated method stub
mProgressDialog = new ProgressDialog(dialog_demo.this);//創建ProgressDialog對象
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); //設置進度條風格,風格為圓形,旋轉的
mProgressDialog.setTitle("讀取ing...");// 設置ProgressDialog標題
mProgressDialog.setMessage("正在讀取中請稍候...");// 設置ProgressDialog提示信息
mProgressDialog.setIndeterminate(true);//設置ProgressDialog 的進度條不明確
mProgressDialog.setCancelable(true);// 設置ProgressDialog 可以按退回鍵取消
mProgressDialog.setButton("確定", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton)
{
// 這里添加點擊后的邏輯
}
});
mProgressDialog.show();// 讓ProgressDialog顯示
return;
}
});
// //////////////////////////////////////////////////////////////////////////////
/*【帶補充對話框】*/
Button btn10 = (Button) findViewById(R.id.dialg_demo_btn10);
btn10.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
// TODO Auto-generated method stub
return;
}
});
// //////////////////////////////////////////////////////////////////////////////
}
// ////////////////////////////////////////////////////////////////////////////////////
/*顯示子函數*/
private void showDialog(String str)
{
new AlertDialog.Builder(dialog_demo.this).setMessage(str).show();
// Toast.makeText(dialog_demo.this, str, Toast.LENGTH_LONG).show();
}
// ////////////////////////////////////////////////////////////////////////////////////
}3 自定義登錄對話框:dialog_demo_login.xml<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/dialog_demo_login"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/dialog_demo_loginTVUserName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="姓名:"
android:textSize="18dp">
</TextView>
<EditText
android:id="@+id/dialog_demo_loginETUserName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:textSize="18dp" >
</EditText>
<TextView
android:id="@+id/dialog_demo_loginTVPassWord"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="密碼:"
android:textSize="18dp" >
</TextView>
<EditText
android:id="@+id/dialog_demo_loginETPassWord"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:textSize="18dp">
</EditText>
</TableLayout>
四、Refs
【Android】對話框 AlertDialog :http://blog.csdn.net/feng88724/article/details/6171450
Android UI學習 - 對話框 (AlertDialog & ProgressDialog) http://android.blog.51cto.com/268543/333769
Android軟件開發之盤點所有Dialog對話框大合集(一) :http://blog.csdn.net/xys289187120/article/details/6601613
Android 對話框(Dialog)大全 建立你自己的對話框 :http://www.cnblogs.com/salam/archive/2010/11/15/1877512.html
轉自:http://www.cnblogs.com/skyseraph/archive/2012/02/22/2362989.html