如何在Android的对话框中自定义CheckMark颜色。

9
如何在Android对话框中自定义CheckMark颜色。默认情况下,CheckMark的颜色为绿色。我想将其自定义为不同的颜色。
3个回答

6
如果您查看android系统中的styles.xml,您会发现复选框样式定义如下:
<style name="Widget.CompoundButton.CheckBox">
   <item name="android:background">@android:drawable/btn_check_label_background</item>
   <item name="android:button">@android:drawable/btn_check</item>
</style>

如果您搜索系统资源,您会发现btn_check是一个带有2种状态(开/关)的可绘制选择器,其中检查是否为绿色。
因此,如果您想要自己的颜色可绘制对象,请按照以下步骤操作:
- 创建styles.xml文件
- 定义要使用的2个可绘制对象
- 创建支持选择器的xml文件

您可以在Android Google文档上找到详细的完整文档。


嗨,我仍然无法成功实现解决方案。 - Karthik
你能否帮我提供更多关于这个问题的信息呢?我已经贴出了一个Java文件的样例。请告诉我具体需要做什么来将复选框的颜色改为其他颜色而不是红色。 - Karthik
AlertDialog.Builder checkbox_dialog = new AlertDialog.Builder( DialogCheckBox.this); checkbox_dialog.setTitle("主标题在这里"); checkbox_dialog.setMultiChoiceItems(myitems, choiceitems, new DialogInterface.OnMultiChoiceClickListener() { public void onClick(DialogInterface dialog, int which, boolean isChecked) { Log.d("TAG","正在选择项目"); } }); - Karthik
2
请编辑您的第一篇帖子,并添加此代码,这将有助于下一个用户更轻松地找到他们问题的答案,我们也将拥有更好的代码样式显示。您应该添加您的Java代码和选择器的XML文件,以查看是否存在任何问题。 - Sephy

1

要更改多选对话框中的复选框,您需要为对话框编写自定义适配器,以便能够访问列表视图。 然后,您可以调用CheckedTextView类的setCheckMarkDrawable方法。

以下是一个示例:

Alert dialog with custom checkboxes

res/drawable目录下有一个名为default_checkbox.xml的文件。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">  

    <item android:state_checked="true"
        android:drawable="@drawable/checkbox_checked" /> <!-- checked -->

    <item android:state_pressed="true"
        android:drawable="@drawable/checkbox_checked" /> <!-- pressed -->

    <item android:drawable="@drawable/checkbox_default" /> <!-- default -->

</selector>

文件 DialogUtil.java

package example.dialog;

import android.app.AlertDialog;
import android.content.Context;
import android.util.Log;
import android.view.*;
import android.widget.*;
import android.widget.AdapterView.OnItemClickListener;

public class DialogUtil {

    private DialogUtil() {
    }

    public static AlertDialog show(Context context) {
        String[] items = {"text 1", "text 2", "text 3"};
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setTitle("Test")
            .setPositiveButton("OK", null)
            .setAdapter(new CustomAdapter(context, items), null);
        AlertDialog dialog = builder.show();

        ListView list = dialog.getListView();
        list.setItemsCanFocus(false);
        list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
        list.setOnItemClickListener(listener);
        return dialog;
    }

    private static OnItemClickListener listener = new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Log.i("DialogUtil", "Clicked on " + view);
        }
    };

    private static class CustomAdapter extends ArrayAdapter<String> {

        public CustomAdapter(Context context, String[] array) {
            super(context, android.R.layout.simple_list_item_multiple_choice, array);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view = super.getView(position, convertView, parent);
            if (view instanceof CheckedTextView) {
                CheckedTextView checkedView = (CheckedTextView) view;
                checkedView.setCheckMarkDrawable(R.drawable.default_checkbox);
            }
            return view;
        }
    }
}

注意: 如果您仅使用 AlertDialog, 那么在获取 ListView 之前,首先要像上面解释的那样调用 show 方法。

然而,如果您使用 DialogFragmentonCreateDialog,那么您应该在 onStart 方法中获取 ListView


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接