Android ---------- 彈出層自定義布局 之 AlertDialog


1.Android 最簡單實用的彈出層控件  AlertDialog (注: 設置 AlertDialog 的任何屬性要在dialog.show() 之后進行

  (1)效果圖

    

  (2)控制器代碼

 AlertDialog dialog=new AlertDialog.Builder(context)
                                .setTitle("提示")
                                .setMessage("/**/")
                                .setNegativeButton("close", new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        //do nothing - it will close on its own

                                    }
                                })
                                .setPositiveButton("go", new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        //
                                    }
                                })
                                .show();

                        // 在dialog執行show之后才能來設置
                        TextView tvMsg = (TextView) dialog.findViewById(android.R.id.message);
                        tvMsg.setTextSize(20);
                        tvMsg.setTextColor(Color.parseColor("#FF0000"));

                        dialog.getButton(dialog.BUTTON_NEGATIVE).setTextSize(16);
                        dialog.getButton(dialog.BUTTON_NEGATIVE).setTextColor(Color.parseColor("#8C8C8C"));
                        dialog.getButton(dialog.BUTTON_POSITIVE).setTextSize(16);
                        dialog.getButton(dialog.BUTTON_POSITIVE).setTextColor(Color.parseColor("#1DA6DD"));

 

2.(1)效果圖

     

 

  (2) 解讀:混合布局,代碼設置一部分,自定義布局一部分;

  (3)控制器代碼:

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

                        View view = View.inflate(context, R.layout.activity_dialog_view, null);   // 賬號、密碼的布局文件,自定義
                        builder.setIcon(R.mipmap.ic_launcher);//設置對話框icon
                        //初始化字符串數組
                        final String[] strArray = new String[]{"床前明月光","意識地上霜"};
                        builder.setTitle("簡單列表");
                        //設置列表
//                        builder.setItems(strArray, new DialogInterface.OnClickListener() {  //
//                            @Override
//                            public void onClick(DialogInterface dialog, int which) {
//                                Toast.makeText(context,strArray[which],Toast.LENGTH_SHORT).show();
//                            }
//                        });
              //設置單選
builder.setSingleChoiceItems(strArray, 0, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } });
                //設置多選
// builder.setMultiChoiceItems(strArray, new boolean[]{false, false, false, false}, new DialogInterface.OnMultiChoiceClickListener() { // @Override // public void onClick(DialogInterface dialog, int which, boolean isChecked) { // // } // }); AlertDialog dialog = builder.create(); dialog.setView(view); dialog.setButton(DialogInterface.BUTTON_POSITIVE,"確定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss();//關閉對話框 } }); dialog.setButton(DialogInterface.BUTTON_NEUTRAL,"點我試試", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); dialog.show(); Window dialogWindow = dialog.getWindow();//獲取window對象 dialogWindow.setGravity(Gravity.TOP);//設置對話框位置 dialogWindow.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);//設置橫向全屏 dialogWindow.setWindowAnimations(R.style.share_animation);//設置動畫 見(4)資源文件

  (4)資源文件

      style文件

<style name="share_animation" parent="android:Animation">
        <item name="android:windowEnterAnimation">@anim/dialog_enter</item>  //進入時的動畫
        <item name="android:windowExitAnimation">@anim/dialog_exit</item>    //退出時的動畫
    </style>

    

    

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

    <translate
        android:fromYDelta="-100%p"     <!--  %p指相對於父容器-->
        android:duration="600"               <!-- 持續時間-->
    />
</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

    <translate
        android:fromYDelta="-100%p"
        android:duration="600"
    />
</set>

3.(1)效果圖

  

 (2)控制器代碼

     只需在上述控制器代碼中加上以下代碼塊

               WindowManager.LayoutParams params = dialog.getWindow().getAttributes();
                        params.x = 0; // 新位置X坐標
                        params.y = 0; // 新位置Y坐標
                        //params.width = 300; // 寬度
                        params.height = 200; // 高度
                        params.alpha = 0.7f; // 透明度

                        dialog.getWindow().setAttributes(params);

 

解決添加動畫時可能出現的問題:https://stackoverflow.com/questions/45952607/error-style-attribute-androidattr-windowexitanimation-not-found#

 

  1. 注意:是先顯示出來dialog,show()出來,才能再設置寬高屬性

  2. 去除邊框

    AlertDialog.setView(view,0,0,0,0);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM