列表视图中的复选框样式不正确

时间:2014-01-11 23:09:58

标签: android android-listview android-styles android-checkbox

我在列表视图中显示的复选框中存在样式问题。我的应用使用的主题是Holo,但复选框以旧样式显示。出现在别处的复选框看起来很好。我没有做任何花哨的事情,比如创造我自己的风格。屏幕截图:

enter image description here

复选框看起来应该与右图相似。这是在v4.0.3上。复选框看起来应该在我尝试使用v4.4.2的其他设备上。

列表视图行的XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <CheckBox android:id="@+id/ListRow_Task_TaskComplete" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:layout_marginLeft="6sp"
        android:focusable="false" />

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:paddingTop="7dip"
        android:paddingBottom="7dip"
        android:layout_toRightOf="@+id/ListRow_Task_TaskComplete"
        android:layout_centerVertical="true" >

        <TextView android:id="@+id/ListRow_Task_Name" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:textSize="16sp" />

        // next two textviews are programmatically hidden right now
        <TextView android:id="@+id/ListRow_Task_Deadline" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:text=""
            android:textSize="12sp" />

        <TextView android:id="@+id/ListRow_Task_Tags" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:drawableLeft="@drawable/icon_tag"
            android:drawablePadding="4dip"
            android:textSize="12sp" />  

    </LinearLayout>

</RelativeLayout>

如何让左侧的复选框看起来像是应该的?

4 个答案:

答案 0 :(得分:3)

将所有dpis和分辨率的Holo复选框图像从android drawable文件夹中复制出来。然后将android:button属性设置为新的选择器xml。这样您就可以完全控制它在目标设备上的外观。

<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_checked="true" android:state_focused="true"
            android:drawable="@drawable/btn_check_on_focused_holo_light" /> 
    <item android:state_checked="false" android:state_focused="true"
            android:drawable="@drawable/btn_check_off_focused_holo_light" />
    <item android:state_checked="false"
            android:drawable="@drawable/btn_check_off_holo_light" />
    <item android:state_checked="true"
            android:drawable="@drawable/btn_check_on_holo_light" />
</selector>

答案 1 :(得分:3)

我最近遇到了同样的问题并找到了真正的解决方案,而不仅仅是解决方法。

当您使用getView()方法夸大观看次数时

public View getView(int position, View convertView, ViewGroup parent) { return inflater.inflate(R.layout.list_item, parent, false); }

您需要确保您使用的inflater包含Activity上下文而不包含Application上下文,因为Activity上下文知道您使用的主题而Application不是。

因此,请确保以下列或类似方式之一创建inflater:

  • LayoutInflater.from(activity);
  • getLayoutInflater(); // from within activity
  • LayoutInflater.from(parent.getContext());

为了快速检查此解决方案,只需替换:

return inflater.inflate(R.layout.list_item, parent, false);

使用:

return LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);

答案 2 :(得分:0)

我也有这个问题。我正在使用三星Galaxy S4,我的应用程序中的CheckBox显示为旧学校类型。如果我在“Android模拟器”中运行相同的应用程序,它会以我想要的方式显示。

我建议的最好的事情,不要担心。只需在市场上传应用程序,它应该没问题。

答案 3 :(得分:0)

尝试将AndroidManifest.xml文件中的targetSdkVersion设置为最新版本(确保已下载该sdk版本):

android:targetSdkVersion="19"