1. 程式人生 > >Android自定義Dialog,實現性別選擇,日期選擇,獲取EditText內容

Android自定義Dialog,實現性別選擇,日期選擇,獲取EditText內容

Android 自定義 Dialog ,實現 性別選擇,日期選擇和 自定義佈局獲取EditText內容

Dialog類是對話方塊的基類,但是應該避免直接例項化Dialog,而是應該儘量使用下列子列之一 :
AlertDialog
此對話方塊可顯示標題、最多三個按鈕、可選擇項列表或自定義佈局。
DatePickerDialog 或 TimePickerDialog
此對話方塊帶有允許使用者選擇日期或時間的預定義 UI。
————————————————來自於Google Android Develop 開發手冊

日期選擇器

這裡我們用到了Android原生提供的日期選擇器對話方塊 DatePickerDialog

  1. 首先你可以先設定一個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);
  1. 然後你可以在按鈕 onClick() 點選事件中設定觸發 DatePickerDialog
    • 傳入五個引數 parent context ,監聽器,年,月,日
new DatePickerDialog(MainActivity.this, onDateSetListener, mYear, mMonth, mDay).show();
  1. 設定日期選擇器對話方塊的監聽器 , DatePickerDialog.OnDateSetListener
    • void onDateSet (DatePicker view,
      int year,
      int month,
      int dayOfMonth)
    • 將獲取到的date轉換成字串顯示到textview
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); } };

性別選擇器

  1. 首先我們要建立一個數組,來提供選擇的選項
    java
    private String[] sexArry = new String[]{"不告訴你", "女", "男"};// 性別選擇
  2. 設定點選事件後,實現性別選擇器的方法 ,這裡我們使用了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輸入框的資料

  1. 使用使用LayoutInflater來載入dialog_setname.xml佈局
  2. 初始化AlertDialog,使用setView()方法將自定義View顯示到dialog
  3. 設定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 目前還在學習中,如果有實現的可以討論一下.