Android:为什么Checkbox不显示未选中状态的空复选框?

时间:2016-04-19 04:55:04

标签: android checkbox view

我在CardView布局文件中有复选框代码。 CardView具有白色背景。通常情况下,我认为未经检查的Checkbox是一个黑色方块。我的布局显示没有空白复选框。我只看到白色的CardView背景(屏幕截图中的顶部CardView)。当我单击CardView的最右侧区域,其中格式化复选框代码时,会出现绿色复选框(屏幕截图中的底部CardView)。我在这里错过了什么? enter image description here

布局文件:

<LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/background4main"  >

<android.support.v7.widget.CardView
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/singlecard_view1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    card_view:cardBackgroundColor="@android:color/white"
    card_view:cardCornerRadius="6dp"
    android:orientation="horizontal"
    android:layout_margin="4dp">

    <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?android:selectableItemBackground"  >

    <TextView
        android:id="@+id/cardBlankText2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:text="todo"
        android:textStyle="bold"
        android:textColor="@android:color/black"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textSize="20sp"  />

    <TextView
        android:id="@+id/cardBlankText3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/cardBlankText2"
        android:text="note1"
        android:textStyle="bold"
        android:textColor="@android:color/black"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textSize="20sp"  />

    <CheckBox
        android:id="@+id/chkSelected"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_centerVertical="true"  />

    </RelativeLayout>

</android.support.v7.widget.CardView>

</LinearLayout>

Adapter file:
...
public class ListViewHolder extends RecyclerView.ViewHolder {

    TextView cardBlankText2;
    TextView cardBlankText3;
    CheckBox chkSelected;

    public ListViewHolder(View itemView) {
        super(itemView);

        cardBlankText2 = (TextView)itemView.findViewById(R.id.cardBlankText2);
        cardBlankText3 = (TextView)itemView.findViewById(R.id.cardBlankText3);
        chkSelected = (CheckBox) itemView.findViewById(R.id.chkSelected);
    }
...
@Override
public void onBindViewHolder(final ListViewHolder holder, final int position) {

        holder.cardBlankText2.setText(dbList.get(position).getTodo());
        holder.cardBlankText3.setText(dbList.get(position).getNote1());
        holder.chkSelected.setChecked(dbList.get(position).isSelected());
        holder.chkSelected.setTag(dbList.get(position));
}

3 个答案:

答案 0 :(得分:4)

使用以下代码:

<android.support.v7.widget.AppCompatCheckBox
                android:id="@+id/settings_notification_checkbox"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:checked="true"
                app:buttonTint="@color/colorPrimary"/>

而不是:

<CheckBox
        android:id="@+id/check"
        android:button="@drawable/customdrawablecheckbox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

答案 1 :(得分:2)

Drawable customcheckbox.xml:

  <?xml version="1.0" encoding="utf-8"?>
   <selector  xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_checked="false" android:drawable="@drawable/unchecked_drawable" />
   <item android:state_checked="true" android:drawable="@drawable/checked_drawable" />
   <item android:drawable="@drawable/unchecked_drawable" /> <!-- default state -->
  </selector>

和你的xml文件:

<CheckBox
android:id="@+id/check"
android:button="@drawable/customdrawablecheckbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

答案 2 :(得分:1)

可能的原因:

  • 您的复选框可以是白色。

  • 它的可见性可能已经消失

还为textview添加toLeftOf属性,以便它们可以不与复选框重叠。检查主题是否为复选框的颜色。如果这没有帮助,则可以将drawable ?android:attr/listChoiceIndicatorMultiple置于未选中状态