2016-06-25 2 views
1

Проблемы:Представления в пользовательском ListView элемента не apptheme

У меня есть пользовательский адаптер для моего listview, который в настоящее время содержит checkbox и edittext. Я не изменил ни одной темы в папке res/values/styles. По какой-то причине checkbox и edittext имеют другой стиль/тему, чем обычный стиль/тема («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> 

Но флажок белого цвета, и их можно увидеть только тогда, когда проверяется. (цвет не является цветом). А edittext имеет тот же цвет, который имеет флажок, когда он установлен (зеленый/синий).

цвета:

<color name="colorPrimary">#3F51B5</color> 
<color name="colorPrimaryDark">#303F9F</color> 
<color name="colorAccent">#FF4081</color> 

Что я пробовал?

Я попытался установить тему/стиль контейнера элемента и самого элемента, с атрибутами 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> 

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; 
} 

скриншоты:

screenshot checkbox not checked screenshot checkbox checked

, как мы можем видеть, радио-кнопки имеют те default layou t, accentcolor «pink», и они имеют серый оттенок. но чекбокс - белый, а акцент - синий/зеленоватый.

+0

Если вы не установили ни одного стиля для своего флажка и edittext, они будут показаны по умолчанию. Я что-то упустил в вашем вопросе? Не могли бы вы опубликовать небольшой скриншот того, что реально и что ожидается? – Rajkiran

+0

ok я опубликую скриншоты через минуту – Anthony

+0

@MikeM. Пробовал это, не работал:/ – Anthony

ответ

4

Вам необходимо использовать ActivityContext для всего, что требует стилей и значений атрибутов из его темы. Так как ваш поле инициализируется в его конструкторе, вам необходимо создать экземпляр Adapter с ActivityContext, а не Application, поэтому LayoutInflater заканчивается правильным. Например:

MyAdapter adapter = new MyAdapter(MainActivity.this, list); 

 Смежные вопросы

  • Нет связанных вопросов^_^