重點
建議在設計應用程式之初,獨立一個資料夾去設計並且加入對話框,每個地方需要使用到對話框的時候乎叫共同的程式碼,如此一來整個應用程式有統一的對話架構。
activity_main.xml
<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" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="基本對話框"
android:id="@+id/btn_SimpleDialog" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="擁有兩個Button的對話框"
android:id="@+id/btn_DoubleDialog" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="擁有三個Button的對話框"
android:id="@+id/btn_Tripleialog" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="進行登入驗證的對話框"
android:id="@+id/btn_AuthenticationDialog" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="顯是進度的對話框 "
android:id="@+id/btn_ProgressDialog" />
</LinearLayout>
</RelativeLayout>
authentication_dialog
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="登入帳號"
android:id="@+id/username_view" />
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:text="Name"
android:ems="10"
android:id="@+id/username_edit" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="登入密碼"
android:id="@+id/password_view" />
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:text="Name"
android:ems="10"
android:id="@+id/password_edit" />
</LinearLayout>
</LinearLayout>
string.xml
<resources>
<string name="app_name">Dialog</string>
<string name="hello_world">Hello world!</string>
<string name="action_settings">Settings</string>
<string name="alert_simple_dialog_title">這是個提示框。請按確定返回</string>
<string name="alert_double_dialog_title">這是個提示框。請任點選下列按鈕返回</string>
<string name="alert_double_dialog_message">是否退出遊戲</string>
<string name="alert_double_dialog_context">確定要退出遊戲請點選確定按鈕。如果要繼續遊戲請點選取消按鈕。如果想要了解最高分可以點選最高紀錄按鈕</string>
<string name="alert_double_dialog_ok">確定</string>
<string name="alert_double_dialog_hide">隱藏</string>
<string name="alert_double_dialog_something">最高紀錄</string>
<string name="alert_double_dialog_cancel">取消</string>
<string name="alert_double_dialog_entry">請輸入</string>
</resources>
MainActivity.java
package com.example.win7.dialog;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
public class MainActivity extends Activity {
/*設定5個int來作為五個對話框識別,使用Menu來產生*/
private static final int Dialog1 = Menu.FIRST;
private static final int Dialog2 = Menu.FIRST+1;
private static final int Dialog3 = Menu.FIRST+2;
private static final int Dialog4 = Menu.FIRST+3;
private static final int Dialog5 = Menu.FIRST+4;
private Button btn_SimpleDialog,btn_DoubleDialog,btn_Tripleialog,btn_AuthenticationDialog,btn_ProgressDialog;
private AlertDialog.Builder alb_SimpleDialog;
private AlertDialog.Builder alb_DoubleDialog;
private AlertDialog.Builder alb_Tripleialog;
private AlertDialog.Builder alb_AuthenticationDialog;
private LayoutInflater lai_AuthenticationDialog;
private ProgressDialog prd_ProgressDialog;
/*覆寫Activity的onCreateDialog方法,當成是執行到Activity的showDialog()方法時
* onCreateDialog()方法會自動乎叫並且傳入id*/
protected Dialog onCreateDialog(int id){
switch (id){
case Dialog1:
setTitle("目前點選是:基本對話框");
/*呼叫BuildDialog()方法來建立對話框*/
return BuildDialog1(MainActivity.this);
case Dialog2:
setTitle("目前點選是:擁有兩個Button的對話框");
return BuildDialog2(MainActivity.this);
case Dialog3:
setTitle("目前點選是:擁有三個Button的對話框");
return BuildDialog3(MainActivity.this);
case Dialog4:
setTitle("目前點選是:進行登入對話框");
return BuildDialog4(MainActivity.this);
case Dialog5:
setTitle("目前點選是:顯示進度");
return BuildDialog5(MainActivity.this);
}
return null;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*showDialog()方法建立對話框視窗*/
setupViewComponent();
}
private void setupViewComponent(){
btn_SimpleDialog=(Button)findViewById(R.id.btn_SimpleDialog);
btn_SimpleDialog.setOnClickListener(Go_SimpleDialog);
btn_DoubleDialog=(Button)findViewById(R.id.btn_DoubleDialog);
btn_DoubleDialog.setOnClickListener(Go_DoubleDialog);
btn_Tripleialog=(Button)findViewById(R.id.btn_Tripleialog);
btn_Tripleialog.setOnClickListener(Go_Tripleialog);
btn_AuthenticationDialog=(Button)findViewById(R.id.btn_AuthenticationDialog);
btn_AuthenticationDialog.setOnClickListener(Go_AuthenticationDialog);
btn_ProgressDialog=(Button)findViewById(R.id.btn_ProgressDialog);
btn_ProgressDialog.setOnClickListener(Go_ProgressDialog);
}
private Button.OnClickListener Go_SimpleDialog = new Button.OnClickListener(){
@Override
public void onClick(View view) {
showDialog(Dialog1);
}
};
private Button.OnClickListener Go_DoubleDialog = new Button.OnClickListener(){
@Override
public void onClick(View view) {
showDialog(Dialog2);
}
};
private Button.OnClickListener Go_Tripleialog = new Button.OnClickListener(){
@Override
public void onClick(View view) {
showDialog(Dialog3);
}
};
private Button.OnClickListener Go_AuthenticationDialog = new Button.OnClickListener(){
@Override
public void onClick(View view) {
showDialog(Dialog4);
}
};
private Button.OnClickListener Go_ProgressDialog = new Button.OnClickListener(){
@Override
public void onClick(View view) {
showDialog(Dialog5);
}
};
private Dialog BuildDialog1(Context context){
/*呼叫AlertDialog.Builder()方法建立對話視窗*/
alb_SimpleDialog = new AlertDialog.Builder(context);
alb_SimpleDialog.setTitle(R.string.alert_simple_dialog_title);
alb_SimpleDialog.setIcon(R.mipmap.ic_launcher);
/*在基本對話框上面配置確定按鈕*/
alb_SimpleDialog.setPositiveButton(R.string.alert_double_dialog_ok,
new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int whichButton){
setTitle("點選了基本對話框的確定鍵");
}
});
/*呼叫create()方法將使得對話框實體被建立出來,但是要直到呼叫show()或者showDialog()方法,該對話框式視窗才會顯示出來*/
return alb_SimpleDialog.create();
}
private Dialog BuildDialog2(Context context){
alb_DoubleDialog = new AlertDialog.Builder(context);
alb_DoubleDialog.setTitle(R.string.alert_double_dialog_title);
alb_DoubleDialog.setIcon(R.mipmap.ic_launcher);
alb_DoubleDialog.setPositiveButton(R.string.alert_double_dialog_ok,
new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int whichButton){
setTitle("點選了有兩個對話框的確定鍵");
}
});
alb_DoubleDialog.setNegativeButton(R.string.alert_double_dialog_cancel,
new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int whichButton) {
setTitle("點選了有兩個對話框的取消鍵");
}
} );
return alb_DoubleDialog.create();
}
private Dialog BuildDialog3(Context context){
alb_Tripleialog = new AlertDialog.Builder(context);
alb_Tripleialog.setTitle(R.string.alert_double_dialog_message);
alb_Tripleialog.setMessage(R.string.alert_double_dialog_context);
alb_Tripleialog.setIcon(R.mipmap.ic_launcher);
alb_Tripleialog.setPositiveButton(R.string.alert_double_dialog_ok,
new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int whichButton){
setTitle("點選了有三個對話框的確定鍵");
}
});
alb_Tripleialog.setNeutralButton(R.string.alert_double_dialog_something,
new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int whichButton) {
setTitle("點選了有三個對話框的最高分數鍵");
}
} );
alb_Tripleialog.setNegativeButton(R.string.alert_double_dialog_cancel,
new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int whichButton) {
setTitle("點選了有三個對話框的取消鍵");
}
} );
return alb_Tripleialog.create();
}
private Dialog BuildDialog4(Context context){
lai_AuthenticationDialog = LayoutInflater.from(this);
final View textEntryView = lai_AuthenticationDialog.inflate(
R.layout.authentication_dialog,null);
alb_AuthenticationDialog = new AlertDialog.Builder(context);
alb_AuthenticationDialog.setTitle(R.string.alert_double_dialog_entry);
alb_AuthenticationDialog.setIcon(R.mipmap.ic_launcher);
alb_AuthenticationDialog.setView(textEntryView);
alb_AuthenticationDialog.setPositiveButton(R.string.alert_double_dialog_ok,
new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int whichButton) {
setTitle("點選了驗證框的確定鍵");
}
});
alb_AuthenticationDialog.setNegativeButton(R.string.alert_double_dialog_cancel,
new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int whichButton) {
setTitle("點選了驗證框的取消鍵");
}
});
return alb_AuthenticationDialog.create();
}
private Dialog BuildDialog5(Context context){
prd_ProgressDialog = new ProgressDialog(context);
prd_ProgressDialog.setTitle("資料處理中");
prd_ProgressDialog.setMessage("請稍候....");
return prd_ProgressDialog;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
沒有留言:
張貼留言