Dialog 客製化 (icon + text)
===
### 原始

```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();
```
### 客製化

* 自訂 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`