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

博主话不多,我们直接代码:  代码中注释会写的很清楚

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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值