代码之家  ›  专栏  ›  技术社区  ›  Shawn.Y

使用AppCompatCheckedTextView在AlertDialog中设置drawable

  •  0
  • Shawn.Y  · 技术社区  · 7 年前

    我创建了一个警告对话框,提示用户从国家列表中进行选择。我使用AppCompatCheckedTextView setCompundDrawablesWithIntrinsicBounds设置drawable标志和选择点。当在宽屏/手机设置为默认显示尺寸时,它工作得很好,但当在小屏幕/最大显示尺寸时,图标与它应该的大小不匹配(有些选项甚至丢失)

    default display size display size = largest

    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;
    }
    
    1 回复  |  直到 7 年前