博主話不多,我們直接代碼: 代碼中註釋會寫的很清楚
MainActivity.java
public class MainActivity extends Activity implements CustomDialogFragment.Callback {
private String[] items;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
items = getResources().getStringArray(R.array.skills);
}
public void showAlertDialog(View v) {
// Builder 模式:建造者模式
// AlertDialog 的構造方法【受保護】,使用 Builder 創建對話框
AlertDialog.Builder builder = new AlertDialog.Builder(this);
// builder.setIcon()
builder.setTitle("標題");
builder.setMessage("對話框的文本內容");
// 不可取消【默認 true】
builder.setCancelable(false);
// 設置按鈕:確定、取消、中立【顯示的位置固定】
builder.setPositiveButton(R.string.button_ok, dialogListener);
builder.setNegativeButton(R.string.button_cancel, dialogListener);
builder.setNeutralButton(R.string.button_neutral, dialogListener);
// 創建對話框
AlertDialog dialog = builder.create();
dialog.show();
}
OnClickListener dialogListener = new DialogInterface.OnClickListener() {
/**
* 對話框中按鈕的點擊事件
* @param dialog 事件源所在的對話框
* @param which 事件源(按鈕)
*/
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case DialogInterface.BUTTON_POSITIVE:
// 確定
break;
case DialogInterface.BUTTON_NEGATIVE:
// 取消
break;
case DialogInterface.BUTTON_NEUTRAL:
// 中立
break;
}
}
};
public void showListAlertDialog(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("列表對話框");
// 參數一:列表中的數據集
// 參數二:監聽器
builder.setItems(items, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// which 是列表中選中項的位置【索引】
showToast(items[which]);
}
});
// 設置取消按鈕【不需要確定按鈕,選中即確定】
builder.setNegativeButton(R.string.button_cancel, null);
AlertDialog dialog = builder.create();
dialog.show();
}
public void showSingleListAlertDialog(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("單選列表對話框");
// 參數一:列表中的數據集
// 參數二:默認選中的位置,-1 無默認選中項
builder.setSingleChoiceItems(items, -1, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// which 是列表中選中項的位置【索引】
showToast(items[which]);
}
});
builder.setNegativeButton(R.string.button_cancel, null);
builder.setPositiveButton(R.string.button_ok, null);
AlertDialog dialog = builder.create();
dialog.show();
}
public void showMultiListAlertDialog(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("多選列表對話框");
builder.setCancelable(false);
final boolean[] checkedItems = new boolean[items.length];
// 參數一:列表中的數據集
// 參數二:列表中各項的狀態(true 爲選中、false 爲未選中)
// 參數三:多選監聽器 DialogInterface.OnMultiChoiceClickListener
builder.setMultiChoiceItems(items,
checkedItems,
new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
checkedItems[which] = isChecked;
}
});
builder.setNegativeButton(R.string.button_cancel, null);
builder.setPositiveButton(R.string.button_ok, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
showToast(Arrays.toString(checkedItems));
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
public void showMyDialog(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("自定義對話框");
// 加載自定義視圖
// 方案一
// builder.setView(R.layout.dialog_demo);
// 方案二
View view = getLayoutInflater().inflate(R.layout.dialog_demo, null);
// EditText editTextName = (EditText) view.findViewById(R.id.editText_name);
builder.setView(view);
builder.setPositiveButton(R.string.button_ok, null);
builder.setNegativeButton(R.string.button_cancel, null);
AlertDialog dialog = builder.create();
dialog.show();
}
public void showDateDialog(View v) {
// 獲得當前日期
Calendar now = Calendar.getInstance();
int year = now.get(Calendar.YEAR);
int month = now.get(Calendar.MONTH);
int day = now.get(Calendar.DAY_OF_MONTH);
// 參數一:上下文
// 參數二:主題【可選】
// 參數三:監聽器 DatePickerDialog.OnDateSetListener
DatePickerDialog dialog = new DatePickerDialog(
this,
android.R.style.Theme_DeviceDefault_Light_Dialog,
dateListener,
year,
month,
day);
dialog.show();
}
DatePickerDialog.OnDateSetListener dateListener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
}
};
public void showTimeDialog(View v) {
// 獲得當前時間
Calendar now = Calendar.getInstance();
int hourOfDay = now.get(Calendar.HOUR_OF_DAY);
int minute = now.get(Calendar.MINUTE);
boolean is24Hour = true;
// 參數一:上下文
// 參數二:監聽器 TimePickerDialog.OnTimeSetListener
// 參數三:小時
// 參數四:分鐘
// 參數五:是否以 24 小時方式顯示時間
TimePickerDialog dialog = new TimePickerDialog(
this,
timeListener,
hourOfDay,
minute,
is24Hour);
dialog.show();
}
TimePickerDialog.OnTimeSetListener timeListener = new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
}
};
public void showFragmentDialog(View v) {
MyDialogFragment dialogFragment = new MyDialogFragment();
dialogFragment.show(getFragmentManager(), "fg");
}
public void showCustomFragmentDialog(View v) {
FragmentManager fm = getFragmentManager();
CustomDialogFragment dialog = CustomDialogFragment.getInstance("自定義對話框");
dialog.show(fm, "dialog_tag");
}
@Override
public void doOk() {
}
@Override
public void doCancel() {
}
private void showToast(String msg) {
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
}
CustomDialogFragment.java
/**
* 自定義對話框
*/
public class CustomDialogFragment extends DialogFragment implements View.OnClickListener {
/**
* 對話框標題
*/
public static final String EXTRA_TITLE = "title";
private Callback callback;
private EditText editTextName;
private EditText editTextPassword;
private Button buttonOk;
private Button buttonCancel;
private static final String TAG = "CustomDialogFragment";
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
Log.d(TAG, "onAttach");
if (activity instanceof Callback) {
callback = (Callback) activity;
}
}
/**
* 創建示例
*
* @param title 對話框標題
* @return 對話框示例
*/
public static CustomDialogFragment getInstance(String title) {
CustomDialogFragment fragment = new CustomDialogFragment();
Bundle bundle = new Bundle();
bundle.putString(EXTRA_TITLE, title);
fragment.setArguments(bundle);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
String title = getArguments().getString(EXTRA_TITLE);
// 設置標題
getDialog().setTitle(title);
View view = inflater.inflate(R.layout.dialog_custom, container);
editTextName = (EditText) view.findViewById(R.id.editText_name);
editTextPassword = (EditText) view.findViewById(R.id.editText_password);
buttonOk = (Button) view.findViewById(R.id.button_ok);
buttonCancel = (Button) view.findViewById(R.id.button_cancel);
// 獲得焦點
editTextName.requestFocus();
// 顯示軟鍵盤
getDialog().getWindow().setSoftInputMode
(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
buttonOk.setOnClickListener(this);
buttonCancel.setOnClickListener(this);
return view;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button_ok:
callback.doOk();
break;
case R.id.button_cancel:
callback.doCancel();
break;
}
// 消失
dismiss();
}
/**
* CustomDialogFragment 的回調方法
*/
interface Callback {
void doOk();
void doCancel();
}
}
MyDialogFragment.java
/**
* 自定義對話框
*/
public class MyDialogFragment
extends DialogFragment implements DatePickerDialog.OnDateSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// 獲得當前日期
Calendar now = Calendar.getInstance();
int year = now.get(Calendar.YEAR);
int month = now.get(Calendar.MONTH);
int day = now.get(Calendar.DAY_OF_MONTH);
DatePickerDialog dialog = new DatePickerDialog(
getActivity(),
android.R.style.Theme_DeviceDefault_Light,
this,
year,
month,
day);
return dialog;
}
@Override
public void onCancel(DialogInterface dialog) {
super.onCancel(dialog);
}
@Override
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
}
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
}
}
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">
<TextView android:text="提示對話框(AlertDialog)" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView_alert"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="對話框"
android:id="@+id/button"
android:layout_below="@id/textView_alert"
android:layout_alignParentStart="true"
android:onClick="showAlertDialog"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="列表對話框"
android:id="@+id/button2"
android:layout_alignBottom="@+id/button"
android:layout_toEndOf="@+id/button"
android:onClick="showListAlertDialog"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="單選列表對話框"
android:id="@+id/button3"
android:layout_alignTop="@+id/button2"
android:layout_toEndOf="@+id/button2"
android:onClick="showSingleListAlertDialog"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="多選列表對話框"
android:id="@+id/button4"
android:layout_below="@+id/button"
android:layout_alignParentStart="true"
android:onClick="showMultiListAlertDialog"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="自定義對話框"
android:id="@+id/button5"
android:layout_alignBottom="@+id/button4"
android:layout_toEndOf="@+id/button4"
android:onClick="showMyDialog"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="日期、時間選擇對話框"
android:id="@+id/textView"
android:layout_below="@+id/button4"
android:layout_alignParentStart="true"
android:layout_marginTop="16dp"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="日期"
android:id="@+id/button6"
android:layout_below="@+id/textView"
android:layout_alignParentStart="true"
android:onClick="showDateDialog"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="時間"
android:id="@+id/button7"
android:layout_alignBottom="@+id/button6"
android:layout_alignStart="@+id/button2"
android:onClick="showTimeDialog"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="DialogFragment 對話框"
android:id="@+id/textView2"
android:layout_below="@+id/button6"
android:layout_alignParentStart="true"
android:layout_marginTop="16dp"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="對話框"
android:id="@+id/button8"
android:layout_below="@+id/textView2"
android:layout_alignParentStart="true"
android:onClick="showFragmentDialog"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="自定義對話框"
android:id="@+id/button9"
android:layout_alignBottom="@+id/button8"
android:layout_alignStart="@+id/button7"
android:onClick="showCustomFragmentDialog"/>
</RelativeLayout>
dialog_custom.xml
<?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"
android:orientation="vertical"
android:padding="24dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="網絡名稱"
android:textSize="12sp" />
<EditText
android:id="@+id/editText_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="密碼"
android:textSize="12sp" />
<EditText
android:id="@+id/editText_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="numberPassword" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_ok"
android:id="@+id/button_ok"
android:layout_gravity="right"
android:layout_marginTop="24dp"
style="@android:style/Widget.DeviceDefault.Button.Borderless"
android:textColor="@android:color/holo_blue_dark"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_cancel"
android:id="@+id/button_cancel"
android:layout_gravity="right"
style="@android:style/Widget.DeviceDefault.Button.Borderless"
android:textColor="@android:color/holo_blue_dark"/>
</LinearLayout>
dialog_demo.xml
<?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"
android:orientation="vertical"
android:padding="24dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="網絡名稱"
android:textSize="12sp" />
<EditText
android:id="@+id/editText_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="密碼"
android:textSize="12sp" />
<EditText
android:id="@+id/editText_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="numberPassword" />
</LinearLayout>
當然博主還是希望觀看的同仁,還是仔細去研究一下代碼,而不是去全部複製下來去使用。
見笑了!
Just do it!! lzl
如有不懂歡迎致件:[email protected] 或加羣 570381012