我在列表视图中显示的复选框中存在样式问题。我的应用使用的主题是Holo,但复选框以旧样式显示。出现在别处的复选框看起来很好。我没有做任何花哨的事情,比如创造我自己的风格。屏幕截图:
复选框看起来应该与右图相似。这是在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>
如何让左侧的复选框看起来像是应该的?
答案 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"