天天看點

關于android原生AlertDialog清單item樣式修改問題

AlertDialog條目清單的樣式修改問題

剛剛在寫一個簡單的彈出框時遇到了一個問題,這個彈出框沒有标題、沒有确定取消按鈕,隻有一個條目清單,就相當于是視訊切換清晰度時彈出的那種選擇彈出框。按照最基本的那種寫法會發現它提供的預設樣式會非常難看,卻一時又不知道怎麼改,一般寫法:

final String[] items = {"标 清", "高 清", "超 清"};
AlertDialog.Builder listDialog = new AlertDialog.Builder(getContext());
listDialog.setItems(items, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        //TODO 條目操作     
    }
});      

這個setItems方法裡面沒有關于布局id的int型參數,也就沒法導入自己想要的條目布局效果。然後我又看了一堆set方法,終于被我找到了:

final String[] items = {"标 清", "高 清", "超 清"};
AlertDialog.Builder listDialog = new AlertDialog.Builder(getContext());
listDialog.setAdapter(new ArrayAdapter<>(getContext(),R.layout.dialog_item, items), (dialog, which) -> {
    //TODO 條目操作
});
AlertDialog dialog = listDialog.create();
dialog.show();
Window dialogWindow = dialog.getWindow();
dialogWindow.setBackgroundDrawableResource(R.drawable.radius_3_no_stroke_black66_bg_shape);
dialogWindow.setGravity(Gravity.END | Gravity.BOTTOM);
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
lp.dimAmount = 0;//螢幕上其他區域陰影程度 0代表無陰影
lp.x = 55;//顯示的x坐标
lp.y = 80;//顯示的y坐标
lp.width = 180;//dialog的寬,高度自适應
dialogWindow.setAttributes(lp);      

用這個setAdapter方法就可以自定義布局

繼續閱讀