2010-08-16 121 views

回答

6

如果你看一下styles.xml from android system,你将看到复选框类型的定义如下:

<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文件配套的选择

你可以找到完整的文档相当的相关详细的the android google doc.

+0

嗨,我仍然无法成功实施解决方案。 – Karthik 2010-09-06 10:45:12

+0

可以请你帮我多一点关于同样的信息。我已经粘贴了一个相同的示例java文件。请帮助我确定我需要做些什么才能让我的复选框颜色更改为其他颜色而不是红色。 – Karthik 2010-09-06 10:46:30

+0

AlertDialog.Builder checkbox_dialog = new AlertDialog.Builder( \t \t \t \t \t DialogCheckBox.this); \t checkbox_dialog.setTitle(“Main Title goes here”); \t \t \t \t \t \t checkbox_dialog。setMultiChoiceItems(myitems,choiceitems, \t \t \t \t \t新DialogInterface.OnMultiChoiceClickListener(){ \t \t \t \t \t \t公共无效的onClick(DialogInterface对话,诠释它, \t \t \t \t \t \t \t \t布尔器isChecked){ \t \t \t \t \t \t \t Log.d(“TAG”,“正在选择的项目”); \t \t \t \t \t \t} \t \t \t \t \t}); – Karthik 2010-09-06 10:48:46

1

要更改多选择对话框中的复选框,则需要自定义适配器为你的对话,这样才能访问列表的意见。然后,您可以调用类CheckedTextView的方法setCheckMarkDrawable

下面是一个例子:

Alert dialog with custom checkboxes

文件default_checkbox.xmlres/drawable

<?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,那么您将获得ListView,内部为onStart