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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章