自定义ListView项中的视图没有主题

Ant*_*ony 1 android listview themes android-layout

问题:

我有一个自定义适配器listview,目前包含checkboxedittext。我没有更改res/values/styles文件夹中的任何主题。由于某种原因,checkboxedittext具有与正常样式/主题(“ AppTheme”)不同的样式/主题。

自动生成的主题:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>
Run Code Online (Sandbox Code Playgroud)

但是该复选框是白色的,只有选中该复选框才能看到。(颜色不是上面设置的colorAccent),并且edittext具有与选中该复选框时相同的颜色(绿色/蓝色)。

颜色:

<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
Run Code Online (Sandbox Code Playgroud)

我尝试了什么?

我尝试使用xml属性android:theme和设置项目容器的主题/样式以及项目本身style。每个都无济于事。

这正常吗?如果是这样,如何更改列表项的样式/主题?如果没有,那可能是错的?

我的listitem.xml:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent" >

<CheckBox
    android:id="@+id/cb_listitem"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="1"/>

<EditText
    android:id="@+id/editText_listitem"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="9"
    android:textColor="@color/black"/>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

自定义适配器中的getView:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder = null;

    if (convertView == null){
        LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.listitem_note_checkbox, null);
        holder = new ViewHolder();
        holder.checkBox = (CheckBox)convertView.findViewById(R.id.cb_listitem);
        holder.editText = (EditText)convertView.findViewById(R.id.editText_listitem);
        convertView.setTag(holder);


    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.editText.setText(items.get(position).note);
    return convertView;
}
Run Code Online (Sandbox Code Playgroud)

屏幕截图:

屏幕截图复选框未选中 屏幕截图复选框已选中

如我们所见,单选按钮具有默认布局accentcolor“粉红色”,并且具有灰色轮廓。但复选框轮廓为白色,而强调色为蓝色/绿色。

Mik*_* M. 5

您需要使用ActivityContext任何东西,需要从它的主题风格和属性值。由于您Adaptercontext字段在其构造函数初始化,您需要实例你AdapterActivityContext,不是Application的,所以LayoutInflater结束了正确的一个。例如:

MyAdapter adapter = new MyAdapter(MainActivity.this, list);
Run Code Online (Sandbox Code Playgroud)