Я создал диалоговое окно с предупреждением, в котором пользователю предлагается выбрать из списка страну.Я использую AppCompatCheckedTextView setCompundDrawablesWithIntrinsicBounds, чтобы установить флаг для рисования и выбрать точку.Он отлично работает, когда на широком экране / на телефоне установлен размер экрана по умолчанию, но когда на маленьком экране / большом размере дисплея значок не совпадает с тем, что должен (некоторые параметры даже отсутствуют)
imgViewCountry.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
// custom dialog
final ArrayList<DOItemValueSet> itemValueSets = new ArrayList<>(countryList.values());
final AlertDialog.Builder builder
= EBDialog.singleChoiceDialog(TemplateActivity.this, itemValueSets, EBApp.getEBResources().getString(R.string.ChooseCountry),
countryList.get(viewModel.getCountryCode()).toString());
builder.setPositiveButton(EBApp.getEBResources().getString(R.string.Ok), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
ListView lw = ((AlertDialog) dialog).getListView();
updateCountry(itemValueSets.get(lw.getCheckedItemPosition()).getValue());
refreshCurrentFragment();
refreshUI();
dltMainDrawer.closeDrawer(GravityCompat.START);
}
});
Dialog dialog = builder.create();
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
ListView lw = ((AlertDialog) dialog).getListView();
for (int i = 0; i < lw.getChildCount(); i++) {
AppCompatCheckedTextView checkedTextView = (AppCompatCheckedTextView) lw.getChildAt(i);
checkedTextView.setCompoundDrawablesWithIntrinsicBounds(
itemValueSets.get(i).getIcon(),
null,
checkedTextView.getCompoundDrawables()[0],
null
);
}
}
});
dialog.show();
}
}
);
Я не уверен, где я ошибся в своем коде?или я не должен использовать этот метод для создания этого представления?
! Редактировать - Добавление пользовательского диалогового кода -
public static AlertDialog.Builder choiceDialog(Context context, List list, String title, CharSequence currentSelected, boolean[] selectedArr, int mode, DialogInterface.OnMultiChoiceClickListener multiChoiceClickListener) {
AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.AlertDialogTheme);
if (mode == 1) {
int selectedIndex = 0;
CharSequence[] array = new CharSequence[list.size()];
for (int i = 0; i < list.size(); i++) {
array[i] = list.get(i).toString();
if (array[i].toString().equalsIgnoreCase(currentSelected.toString())) {
selectedIndex = i;
}
}
builder.setSingleChoiceItems(array, selectedIndex, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
} else if (mode == 2) {
CharSequence[] array = new CharSequence[list.size()];
for (int i = 0; i < list.size(); i++) {
array[i] = list.get(i).toString();
}
builder.setMultiChoiceItems(array, selectedArr, multiChoiceClickListener);
}
builder.setNegativeButton(EBApp.getEBResources().getString(R.string.Cancel), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
}
});
builder.setCustomTitle(getCustomDialogTitle(context, title));
return builder;
}