Android Dialog 多种样式

转载时请记得标明源地址:https://my.oschina.net/lijindou/blog/789864

本人博客地址:  http://my.oschina.net/lijindou/blog

源码地址:http://download.csdn.net/detail/qq_33144317/9685481

上图:

第一次制作这种图,做的很丑,请大家见谅:

上代码:

这个是MainActivity.java中的代码:

import android.app.Activity;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import java.io.File;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    Activity activity = MainActivity.this;
    private static final String TAG = "MainActivity";
    private Button but1;
    private Button but2;
    private Button but3;
    private Button but4;
    private Button but5;
    private Button but6;
    private Button but7;
    private Button but8;
    private Button but9;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initViews();
        initData();
        addEvent();
    }

    private void initViews() {
        but1 = (Button) findViewById(R.id.but1);
        but2 = (Button) findViewById(R.id.but2);
        but3 = (Button) findViewById(R.id.but3);
        but4 = (Button) findViewById(R.id.but4);
        but5 = (Button) findViewById(R.id.but5);
        but6 = (Button) findViewById(R.id.but6);
        but7 = (Button) findViewById(R.id.but7);
        but8 = (Button) findViewById(R.id.but8);
        but9 = (Button) findViewById(R.id.but9);
    }

    private void initData() {

    }

    private void addEvent() {
        but1.setOnClickListener(this);
        but2.setOnClickListener(this);
        but3.setOnClickListener(this);
        but4.setOnClickListener(this);
        but5.setOnClickListener(this);
        but6.setOnClickListener(this);
        but7.setOnClickListener(this);
        but8.setOnClickListener(this);
        but9.setOnClickListener(this);
//        but10.setOnClickListener(this);
    }


    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
            backDialog();
        }
        return false;
    }


    void backDialog() {//这个是可以在退出的时候出现的一个dialog
        AlertDialog.Builder builder = new AlertDialog.Builder(activity);
        builder.setMessage("确认退出吗?");
        builder.setTitle("提示");
        builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                activity.finish();
            }
        });

        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });
        builder.create().show();
    }


    void butDialog() {
//      改变了对话框的图表,添加了三个按钮
//        创建dialog的方法代码如下:
        Dialog dialog = new AlertDialog.Builder(this).setIcon(android.R.drawable.btn_star).setTitle("啦啦啦")
                .setMessage("这里有三个按钮,在6.0以前的时候这三个按钮是平均分布的,按钮显示是从右向左")
                .setPositiveButton("第一个", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub
                        Toast.makeText(activity, "第一个。", Toast.LENGTH_LONG).show();
                    }
                })
                .setNegativeButton("第二个", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub
                        Toast.makeText(activity, "第二个。", Toast.LENGTH_LONG).show();
                    }
                })
                .setNeutralButton("第三个", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub
                        Toast.makeText(activity, "第三个。", Toast.LENGTH_LONG).show();
                    }
                }).create();
        dialog.show();
    }

    void dialog2() {
//      信息内容是一个简单的View类型
//        创建dialog方法的代码如下:

        final EditText editText = new EditText(this);

        AlertDialog.Builder builder = new AlertDialog.Builder(this);

        builder.setTitle("这是个ET,系统的输入框").setIcon(android.R.drawable.ic_dialog_info).setView(
                editText).setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

                Toast.makeText(activity, "确定  文本框的值==" + editText.getText().toString(), Toast.LENGTH_SHORT).show();
                dialog.dismiss();
            }
        }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(activity, "取消", Toast.LENGTH_SHORT).show();
                dialog.dismiss();
            }
        }).show();
    }

    private void dialog3() {
        final String items[] = {"1", "2", "3", "4", "5", "6"};//这里是设置选项的个数和内容
        final boolean selected[] = {true, false, true, true, false, true};//这里 是  设置 是否  选中的
        AlertDialog.Builder builder = new AlertDialog.Builder(this);  //先得到构造器
        builder.setTitle("提示"); //设置标题
        builder.setIcon(R.mipmap.ic_launcher);//设置图标,图片id即可
        builder.setMultiChoiceItems(items, selected, new DialogInterface.OnMultiChoiceClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                // dialog.dismiss();
                //每次 点击 时  都会 执行这个  方法
                Toast.makeText(activity, items[which] + isChecked, Toast.LENGTH_SHORT).show();
            }
        });
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                Toast.makeText(activity, "确定", Toast.LENGTH_SHORT).show();
                //android会自动根据你选择的改变selected数组的值。
                for (int i = 0; i < selected.length; i++) {//这个 是点击确定后的选项的值
                    Log.e(TAG, "看看 这个 selected 的值为 == " + selected[i]);
                }
            }
        });
        builder.create().show();
    }

    void dialog4() {
        final String items[] = {"1", "2"};
        AlertDialog.Builder builder = new AlertDialog.Builder(this);  //先得到构造器
        builder.setTitle("标题"); //设置标题
        builder.setIcon(R.mipmap.ic_launcher);//设置图标,图片id即可
        builder.setSingleChoiceItems(items, 1, new DialogInterface.OnClickListener() {//第二个参数是 设置 默认选中第几项的
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                Toast.makeText(activity, items[which], Toast.LENGTH_SHORT).show();
            }
        });
//        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
//            @Override
//            public void onClick(DialogInterface dialog, int which) {
//                Log.e(TAG, "onClick: which==" + which);
//                Toast.makeText(activity, "确定  选择了===", Toast.LENGTH_SHORT).show();
//                dialog.dismiss();
//
//
//            }
//        });
        builder.create().show();
    }

    void dialog5() {


//       信息内容是一组简单列表项
//        创建dialog的方法代码如下:
        final String items[] = {"1", "2", "3", "4", "5", "6"};
        //dialog参数设置
        AlertDialog.Builder builder = new AlertDialog.Builder(this);  //先得到构造器
        builder.setTitle("标题"); //设置标题
        //builder.setMessage("是否确认退出?"); //设置内容
        builder.setIcon(R.mipmap.ic_launcher);//设置图标,图片id即可
        //设置列表显示,注意设置了列表显示就不要设置builder.setMessage()了,否则列表不起作用。
        builder.setItems(items, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                Toast.makeText(MainActivity.this, items[which], Toast.LENGTH_SHORT).show();
            }
        });
//        builder.setPositiveButton("确定",new DialogInterface.OnClickListener() {
//            @Override
//            public void onClick(DialogInterface dialog, int which) {
//                dialog.dismiss();
//                Toast.makeText(MainActivity.this, "确定", Toast.LENGTH_SHORT).show();
//            }
//        });
        builder.create().show();
    }

    void dialog6() {
//        创建dialog方法的代码如下:
        LayoutInflater inflater = getLayoutInflater();
        View layout = inflater.inflate(R.layout.item, (ViewGroup) findViewById(R.id.dialog));
        final EditText editText = (EditText) layout.findViewById(R.id.etname);
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("自定义布局").setView(layout)
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(activity, editText.getText().toString(), Toast.LENGTH_SHORT).show();
                    }
                })
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                }).show();


    }

    private void dialog7() {
        final UIAlertView delDialog = new UIAlertView(activity, "标题", "亲~想要么",
                "不要", "要要要");
        delDialog.show();

        delDialog.setonClicklistener(
                new UIAlertView.ClickListenerInterface() {
                    public void doLeft() {

                        Toast.makeText(activity, "不要", Toast.LENGTH_SHORT).show();

                        delDialog.dismiss();
                    }

                    public void doRight() {
                        Toast.makeText(activity, "要要要", Toast.LENGTH_SHORT).show();
                        delDialog.dismiss();
                    }
                }
        );
    }

    private void dialog8() {
        View view = this.getLayoutInflater().inflate(R.layout.item_photo, null);
        Button picturelib = (Button) view.findViewById(R.id.picturelib);
        Button carema = (Button) view.findViewById(R.id.camera);
        Button cancle = (Button) view.findViewById(R.id.cancle);
        final Dialog dialog = new Dialog(this, R.style.transparentFrameWindowStyle);
        dialog.setContentView(view, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        Window window = dialog.getWindow();
//        window.setWindowAnimations(R.style.main_menu_animstyle);
        WindowManager.LayoutParams wl = window.getAttributes();
        DisplayMetrics displaymetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
        int height = displaymetrics.heightPixels;
        int Width = displaymetrics.widthPixels;
        wl.x = 0;
        wl.y = height;
        wl.width = ViewGroup.LayoutParams.MATCH_PARENT;
        wl.height = ViewGroup.LayoutParams.WRAP_CONTENT;
        dialog.onWindowAttributesChanged(wl);
        dialog.setCanceledOnTouchOutside(true);
        dialog.show();
        picturelib.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
//                        //调用相机
//                        Intent intent1 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
//                        cameraFile = DiskUtils.generatePhotoFile(MeUserMessageActivity.this);
//                        intent1.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(cameraFile));
//                        startActivityForResult(intent1, 返回值拍照照片不保存照片但进行裁剪);
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory(),
                        "tmp_avatar_" + String.valueOf(System.currentTimeMillis()) + ".jpg")));

            }
        });
        carema.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
//                        //调用相册
//                        Intent openAlbumIntent1 = new Intent(Intent.ACTION_GET_CONTENT);
//                        openAlbumIntent1.setType("image/*");
//                        startActivityForResult(openAlbumIntent1, 返回值调用相册并进行裁剪);
                Intent intent = new Intent();
//                        Toast.makeText(MeUserMessageActivity.this, "xiangce", Toast.LENGTH_LONG).show();
                /**
                 * 下面这句话,与其它方式写是一样的效果,如果:
                 * intent.setData(MediaStore
                 * .Images.Media.EXTERNAL_CONTENT_URI);
                 * intent.setType(""image/*");设置数据类型
                 * 如果朋友们要限制上传到服务器的图片类型时可以直接写如
                 * :"image/jpeg 、 image/png等的类型"
                 */
                intent.setType("image/*");
                intent.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(Intent.createChooser(intent, "Complete action using"), 0);
            }
        });
        cancle.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                dialog.cancel();
            }
        });
    }

    private void dialog9() {
        LayoutInflater inflater = LayoutInflater.from(this);


        LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.dialog_update, null);

        final Dialog dialog = new android.app.AlertDialog.Builder(this).create();

        dialog.show();
        dialog.getWindow().setContentView(layout);
        dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
        dialog.setCanceledOnTouchOutside(false);
        TextView btnOK = (TextView) layout.findViewById(R.id.tv_update_OK);
        TextView btnCancel = (TextView) layout.findViewById(R.id.tv_update_cancel);
        btnCancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(activity, "取消更新", Toast.LENGTH_SHORT).show();
                dialog.dismiss();
            }
        });

        btnOK.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(activity, "开始更新", Toast.LENGTH_SHORT).show();
                dialog.dismiss();
            }
        });
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.but1:
                butDialog();
                break;
            case R.id.but2:
                dialog2();
                break;
            case R.id.but3:
                dialog3();
                break;
            case R.id.but4:
                dialog4();
                break;
            case R.id.but5:
                dialog5();
                break;
            case R.id.but6:
                dialog6();
                break;
            case R.id.but7:
                dialog7();
                break;
            case R.id.but8:
                dialog8();
                break;
            case R.id.but9:
                dialog9();
                break;
//            case R.id.but10:
//
//                break;
//            case R.id.but11:
//
//                break;
//            case R.id.but12:
//
//                break;
        }
    }
}

这个是一个自定义View的代码:

import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;


public class UIAlertView extends Dialog {

    private Context context;
    private String title;
    private String message;
    private String buttonLeftText;
    private String buttonRightText;
    private ClickListenerInterface clickListenerInterface;

    public UIAlertView(Context context, String title, String message, String buttonLeftText, String buttonRightText) {
        super(context, R.style.UIAlertViewStyle);

        this.context = context;
        this.title = title;
        this.message = message;
        this.buttonLeftText = buttonLeftText;
        this.buttonRightText = buttonRightText;
    }

    public interface ClickListenerInterface {
        public void doLeft();

        public void doRight();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        inite();
    }

    public void inite() {
        LayoutInflater inflater = LayoutInflater.from(context);
        View view = inflater.inflate(R.layout.ui_alert_view, null);
        setContentView(view);

        TextView tvMessage = (TextView) view.findViewById(R.id.tvMessage);
        TextView tvLeft = (TextView) view.findViewById(R.id.tvBtnLeft);
        TextView tvRight = (TextView) view.findViewById(R.id.tvBtnRight);
        TextView tvTitle = (TextView) view.findViewById(R.id.tvTitle);

        if ("".equals(title)) {
            tvTitle.setVisibility(View.GONE);
        } else {
            tvTitle.setText(title);
        }
        tvMessage.setText(message);
        tvLeft.setText(buttonLeftText);
        tvRight.setText(buttonRightText);

        tvLeft.setOnClickListener(new clickListener());
        tvRight.setOnClickListener(new clickListener());

        Window dialogWindow = getWindow();
        WindowManager.LayoutParams lp = dialogWindow.getAttributes();
        DisplayMetrics d = context.getResources().getDisplayMetrics();

        lp.width = (int) (d.widthPixels * 0.8);
        dialogWindow.setAttributes(lp);
    }

    public void setonClicklistener(ClickListenerInterface clickListenerInterface) {
        this.clickListenerInterface = clickListenerInterface;
    }

    private class clickListener implements View.OnClickListener {


        public void onClick(View v) {

            int id = v.getId();
            switch (id) {
                case R.id.tvBtnLeft:
                    clickListenerInterface.doLeft();
                    break;
                case R.id.tvBtnRight:
                    clickListenerInterface.doRight();
                    break;

                default:
                    break;
            }
        }
    }

    ;
}

布局的代码:

<ScrollView 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">

    <LinearLayout
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:orientation="vertical"
        tools:context="dialog.com.dialogall.MainActivity">

        <Button
            android:id="@+id/but1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:text="三个选项的" />

        <Button
            android:id="@+id/but2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"   android:layout_marginTop="10dp"
            android:text="输入框" />

        <Button
            android:id="@+id/but3"
            android:layout_width="wrap_content"   android:layout_marginTop="10dp"
            android:layout_height="wrap_content"
            android:text="多选框" />

        <Button
            android:id="@+id/but4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"   android:layout_marginTop="10dp"
            android:text="单选框" />

        <Button
            android:id="@+id/but5"
            android:layout_width="wrap_content"   android:layout_marginTop="10dp"
            android:layout_height="wrap_content"
            android:text="列表" />

        <Button
            android:id="@+id/but6"
            android:layout_width="wrap_content"   android:layout_marginTop="10dp"
            android:layout_height="wrap_content"
            android:text="自定义布局" />

        <Button
            android:id="@+id/but7"
            android:layout_width="wrap_content"   android:layout_marginTop="10dp"
            android:layout_height="wrap_content"
            android:text="自定义控件" />

        <Button
            android:id="@+id/but8"
            android:layout_width="wrap_content"   android:layout_marginTop="10dp"
            android:layout_height="wrap_content"
            android:text="仿苹果的选择照片" />

        <Button
            android:id="@+id/but9"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"   android:layout_marginTop="10dp"
            android:text="自定义布局(提示更新)" />
    </LinearLayout>
</ScrollView>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章