您的位置:首页 > 移动开发 > Android开发

安卓简单开发-几种dialog创建和使用

2016-06-22 14:19 399 查看
博主话不多,我们直接代码:  代码中注释会写的很清楚

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

如有不懂欢迎致件:zhilin_comeon@163.com  或加群 570381012
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android dialog 对话框