Dialog 客製化 (icon + text) === ### 原始 ![](https://i.imgur.com/LmZWXrb.jpg) ```java= String[] opts = new String[] { "建立資料夾", "上傳檔案", "開啟相機", "上傳相片、影片" }; AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder.setTitle("Share Appliction"); // dialog title //mBuilder.setIcon(R.drawable.ic_baseline_info_24); // dialog icon builder.setItems(opts, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { Toast.makeText(activity, opts[i], Toast.LENGTH_SHORT).show(); } }); AlertDialog mDialog = builder.create(); mDialog.show(); ``` ### 客製化 ![](https://i.imgur.com/YzbLUr0.jpg) * 自訂 dialog item 的內容物件 ```java= public static class DialogItem { public final String text; public final int icon; public DialogItem(String text, Integer icon) { this.text = text; this.icon = icon; } @Override public String toString() { return text; } } ``` * 新增一 `ArrayAdapter` 物件, 用來客製 dialog item ```java= final DialogItem[] items = { new DialogItem("建立資料夾", R.drawable.ic_baseline_folder_24), new DialogItem("上傳檔案", R.drawable.ic_baseline_insert_drive_file_24), new DialogItem("開啟相機", R.drawable.ic_baseline_photo_camera_24), new DialogItem("上傳相片、影片", R.drawable.ic_baseline_photo_24), }; ListAdapter adapter = new ArrayAdapter<DialogItem> ( activity, /** 範例是使用系統提供的佈局檔, 這裡可以直接拷貝一份改成自己想要的樣式, 比如顏色、間隔、大小等等 */ R.layout.dialog_item, // 參考範例所使用的 android.R.layout.select_dialog_item /** 佈局檔中的 text 元件 */ R.id.tv_dialogItem, items ){ public View getView(int position, View convertView, ViewGroup parent) { //Use super class to create the View View v = super.getView(position, convertView, parent); TextView tv = (TextView)v.findViewById(R.id.tv_dialogItem); //Put the image on the TextView tv.setCompoundDrawablesWithIntrinsicBounds(items[position].icon, 0, 0, 0); //Add margin between image and text (support various screen densities) int dp5 = (int) (5 * getResources().getDisplayMetrics().density + 0.5f); tv.setCompoundDrawablePadding(dp5); return v; } }; AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle("Share Appliction"); // dialog title // builder.setIcon(R.drawable.ic_baseline_info_24); // dialog icon builder.setAdapter( adapter, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { Toast.makeText(activity, items[i].text, Toast.LENGTH_SHORT).show(); } } ); builder.show(); ``` ## Ref. [How to add an icon before each item in alert dialog?](https://stackoverflow.com/questions/3920640/how-to-add-an-icon-before-each-item-in-alert-dialog) ###### tags: `Dialog`