Android自定義Dialog,實現性別選擇,日期選擇,獲取EditText內容
阿新 • • 發佈:2019-02-08
Android 自定義 Dialog ,實現 性別選擇,日期選擇和 自定義佈局獲取EditText內容
Dialog類是對話方塊的基類,但是應該避免直接例項化Dialog,而是應該儘量使用下列子列之一 :
AlertDialog
此對話方塊可顯示標題、最多三個按鈕、可選擇項列表或自定義佈局。
DatePickerDialog 或 TimePickerDialog
此對話方塊帶有允許使用者選擇日期或時間的預定義 UI。
————————————————來自於Google Android Develop 開發手冊
日期選擇器
這裡我們用到了Android原生提供的日期選擇器對話方塊 DatePickerDialog
- 首先你可以先設定一個date,讓DatePickerDialog 點選時顯示你設定的時間.通常我們都是獲取當前date來顯示.所以我們要用到calender來獲取當前date
Calendar nowdate = Calendar.getInstance();
int mYear = nowdate.get(Calendar.YEAR);
int mMonth = nowdate.get(Calendar.MONTH);
int mDay = nowdate.get(Calendar.DAY_OF_MONTH);
- 然後你可以在按鈕 onClick() 點選事件中設定觸發 DatePickerDialog
- 傳入五個引數 parent context ,監聽器,年,月,日
new DatePickerDialog(MainActivity.this, onDateSetListener, mYear, mMonth, mDay).show();
- 設定日期選擇器對話方塊的監聽器 , DatePickerDialog.OnDateSetListener
- void onDateSet (DatePicker view,
int year,
int month,
int dayOfMonth) - 將獲取到的date轉換成字串顯示到textview
- void onDateSet (DatePicker view,
private DatePickerDialog.OnDateSetListener onDateSetListener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
int mYear = year;
int mMonth = monthOfYear;
int mDay = dayOfMonth;
TextView date_textview = (TextView) findViewById(R.id.changebirth_textview);
String days;
days = new StringBuffer().append(mYear).append("年").append(mMonth).append("月").append(mDay).append("日").toString();
date_textview.setText(days);
}
};
性別選擇器
- 首先我們要建立一個數組,來提供選擇的選項
java
private String[] sexArry = new String[]{"不告訴你", "女", "男"};// 性別選擇
- 設定點選事件後,實現性別選擇器的方法 ,這裡我們使用了AlertDialog
private void showSexChooseDialog() {
AlertDialog.Builder builder3 = new AlertDialog.Builder(this);// 自定義對話方塊
builder3.setSingleChoiceItems(sexArry, 0, new DialogInterface.OnClickListener() {// 2預設的選中
@Override
public void onClick(DialogInterface dialog, int which) {// which是被選中的位置
// showToast(which+"");
changesex_textview.setText(sexArry[which]);
dialog.dismiss();// 隨便點選一個item消失對話方塊,不用點選確認取消
}
});
builder3.show();// 讓彈出框顯示
}
自定義Dialog 佈局,獲取EditText輸入框的資料
- 使用使用LayoutInflater來載入dialog_setname.xml佈局
- 初始化AlertDialog,使用setView()方法將自定義View顯示到dialog
設定AlertDialog的按鈕,設定點選事件來 獲取EditText輸入框的內容,然後設定TextView的內容.
- 佈局檔案
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<EditText
android:id="@+id/changename_edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_marginTop="32dp"
android:hint="暱稱" />
</LinearLayout>
- 自定義Dialog獲取輸入框內容方法
private void onCreateNameDialog() {
// 使用LayoutInflater來載入dialog_setname.xml佈局
LayoutInflater layoutInflater = LayoutInflater.from(this);
View nameView = layoutInflater.inflate(R.layout.dialog_setname, null);
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
this);
// 使用setView()方法將佈局顯示到dialog
alertDialogBuilder.setView(nameView);
final EditText userInput = (EditText) nameView.findViewById(R.id.changename_edit);
final TextView name = (TextView) findViewById(R.id.changename_textview);
// 設定Dialog按鈕
alertDialogBuilder
.setCancelable(false)
.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// 獲取edittext的內容,顯示到textview
name.setText(userInput.getText());
}
})
.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
// create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create();
// show it
alertDialog.show();
}
通常的AlertDialog 實現退出賬號效果
- 設定Yes和Cancel按鈕和點選事件
AlertDialog.Builder builder1 = new AlertDialog.Builder(MainActivity.this);
builder1.setMessage("確定退出賬號?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
finish(); // 這裡使用finish() 模擬下退出賬號~
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User cancelled the dialog
}
});
// Create the AlertDialog object and return it
builder1.show();
城市選擇器
目前還沒有實現… 但是我在看Github上的citypicker 目前還在學習中,如果有實現的可以討論一下.