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#
-
注意:是先顯示出來dialog,show()出來,才能再設置寬高屬性
-
AlertDialog.setView(view,0,0,0,0);