Android AlertDialog.Builder setSingleChoiceItems具有自定义单元格样式

时间:2013-05-26 19:33:07

标签: android android-alertdialog

我想创建一个自定义单元格,删除单元格右侧的“按钮”。

image1 image2

对于AlertDialog,从这个link,我从xml中膨胀了单元格,但它只出现在setSingleChoiceItems的listView之外。

我的代码:

AlertDialog.Builder builder;

    int sdk = android.os.Build.VERSION.SDK_INT;
    if(sdk < android.os.Build.VERSION_CODES.HONEYCOMB) {
        builder = new AlertDialog.Builder(new ContextThemeWrapper(getActivity(), android.R.style.Theme_Dialog));
    } else {
        builder = new AlertDialog.Builder(new ContextThemeWrapper(getActivity(), android.R.style.Theme_Holo_Dialog_NoActionBar_MinWidth));
    }

    final CharSequence[] choiceList = {
            getActivity().getResources().getString(R.string.opt_remind),
            getActivity().getResources().getString(R.string.opt_calendar)};

    builder.setSingleChoiceItems(
            choiceList, 
            -1, // does not select anything
            new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int index) {
                    switch (index) {
                    case 0: // remind me
                        //
                        break;
                    case 1: // add to calendar
                        //
                        break;
                    default:
                        break;
                    }
                    dialog.dismiss();
                }
            });
    builder.setCancelable(true);
    builder.setNegativeButton(getActivity().getResources().getString(R.string.opt_cancel), new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();
        }
    });
    AlertDialog alert = builder.create();
    alert.show();

感谢您的帮助!

祝你好运, Sythus

1 个答案:

答案 0 :(得分:13)

您需要使用适配器,而不是将CharSequence数组直接传递给builder.setSingleChoiceItems。喜欢这个

ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(
    getActivity(), R.layout.your_custom_view, choiceList);

builder.setSingleChoiceItems(adapter, -1, new OnClickListener() { ... });

然后您可以在your_custom_view.xml

中定义布局
<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:textAppearance="?android:attr/textAppearanceListItemSmall"
    android:textColor="?android:attr/textColorAlertDialogListItem"
    android:gravity="center_vertical"
    android:paddingStart="16dip"
    android:paddingEnd="7dip"
    android:ellipsize="marquee" />

这样您就可以像现在一样获得默认样式。如果您想要复选标记或想要自定义它,则默认值为

    android:checkMark="?android:attr/listChoiceIndicatorSingle"