2011-04-06 2 views
38

У меня есть ListActivity и я отображать один список с:Как изменить цвет текста простого элемента списка

setListAdapter(new ArrayAdapter<String>(getApplicationContext(), 
       android.R.layout.simple_list_item_single_choice, mStringList)); 

По умолчанию цвет текста элементов списка белый, я хочу изменить цвет текста вида текста в списке черный.

Как мне это сделать?

+0

Вам просто нужно установить TextColor свойство TextView для изменения цвета шрифта. – Swapna

+0

Я попытался создать новый simple_list_item_single_choice_1.xml, он будет работать для первого tiem, но затем он сегментирует, когда я перехожу к активности. – User7723337

+1

На мой взгляд, лучший способ - использовать метод, объясненный Дхармином. Это действительно удовлетворяет заданный вопрос. –

ответ

79

Другой простой способ заключается в создании файла макета, содержащий TextView вы хотите с TextSize, TextStyle, цвет и т.д. предпочитают вас, а затем используйте его с ArrayAdapter.

например. mytextview.xml

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/tv" 
    android:textColor="@color/font_content" 
    android:padding="5sp" 
    android:layout_width="fill_parent" 
    android:background="@drawable/rectgrad" 
    android:singleLine="true" 
    android:gravity="center" 
    android:layout_height="fill_parent"/> 

, а затем использовать его с ArrayAdapter, как обычно, как

ListView lst = new ListView(context); 
String[] arr = {"Item 1","Item 2"}; 
ArrayAdapter<String> ad = new ArrayAdapter<String>(context,R.layout.mytextview,arr); 
lst.setAdapter(ad); 

Таким образом, вам не нужно будет создать собственный адаптер для него.

+3

потрясающий сниппет! –

+0

В каком каталоге вы сохранили бы свой файл ресурсов, mytextview.xml в этом случае – skjagini

+1

Вы можете сохранить его в каталоге res> layout. – dharmin007

4

Простым словом «вы не можете сделать это с помощью простого setListAdapter». Вы должны использоваться пользовательские ListView для свободного изменения цвета текста или в других представлениях

for Custom Listview you can go with this link

3

вы можете использовать метод SetTextColor (INT) или добавить стиль изменить цвет текста.

<style name="ReviewScreenKbbViewMoreStyle"> 
<item name="android:textColor">#2F2E86</item> 
<item name="android:textStyle">bold</item> 
<item name="android:textSize">10dip</item> 

-1

попробовать этот код ...

<RelativeLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:background="#ffff00"> 

    <ListView 
      android:id="@+id/android:list" 
      android:layout_marginTop="2px" 
      android:layout_marginLeft="2px" 
      android:layout_marginRight="2px" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:background="@drawable/shape_1" 
      android:listSelector="@drawable/shape_3" 
      android:textColor="#ffff00" 
      android:layout_marginBottom="44px" /> 
</RelativeLayout> 
+0

Этот пост отсутствует, как ожидаются изображения для 'shape_1' и 'shape_3'. также просто установка атрибута «android: textColor» не изменяет цвета текста элемента списка. –

42

Я понимаю, что этот вопрос немного стар, но вот очень простое решение, которое отсутствовало. Вам не нужно создавать собственный ListView или даже собственный макет.

Просто создайте анонимный подкласс ArrayAdapter и переопределите getView(). Пусть super.getView() обрабатывает весь тяжелый подъем. Поскольку simple_list_item_1 - это просто текстовое представление, вы можете его настроить (например, установить textColor), а затем вернуть его.

Вот пример из одного из моих приложений. Я показываю список последних мест, и я хочу, чтобы все вхождения «Текущее местоположение» были синими, а остальные - белыми.

ListView listView = (ListView) this.findViewById(R.id.listView); 
listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, MobileMuni.getBookmarkStore().getRecentLocations()) { 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     TextView textView = (TextView) super.getView(position, convertView, parent); 

     String currentLocation = RouteFinderBookmarksActivity.this.getResources().getString(R.string.Current_Location); 
     int textColor = textView.getText().toString().equals(currentLocation) ? R.color.holo_blue : R.color.text_color_btn_holo_dark; 
     textView.setTextColor(RouteFinderBookmarksActivity.this.getResources().getColor(textColor)); 

     return textView; 
    } 
}); 
+0

Мне нравится идея использования super.getView, спасибо. –

+0

Этот ответ намного лучше. –

+0

спасибо. сэкономить много времени. –

0

Создайте файл XML в рес/значений и скопируйте приведенный ниже код

<style name="BlackText"> 
<item name="android:textColor">#000000</item> 
</style> 

и указать стиль деятельности в манифесте, как показано ниже

android:theme="@style/BlackText" 
+0

, используя это делает диалог черным, любые предложения только сделать текст черным? – dakait

1

Попробуйте этот код вместо от android.r.layout.simple_list_item_single_choice Создайте ваш адрес:

<?xml version="1.0" encoding="utf-8"?> 
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:checkMark="?android:attr/listChoiceIndicatorSingle" 
    android:gravity="center_vertical" 
    android:padding="5dip" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:textColor="@android:color/black" 
    android:textStyle="bold"> 
</CheckedTextView> 
+0

Как применить пользовательский флажок android: checkMark? – Erum

34

Вы просто переопределить getView метод ArrayAdapter

ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), 
     android.R.layout.simple_list_item_1, mStringList) { 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = super.getView(position, convertView, parent); 
     TextView text = (TextView) view.findViewById(android.R.id.text1); 
     text.setTextColor(Color.BLACK); 
     return view; 
    } 
}; 
2

Я также столкнулся с этой ситуацией. Вы можете обрабатывать вышеуказанный метод. но прост, если вы пропустите simple_dropdown_item_1line как ресурс. По умолчанию это будет текст черного цвета.

Это мой код, который я достиг в ситуации.

ArrayAdapter<String> arrAdapter = 
new ArrayAdapter<String>(context,android.R.layout.simple_dropdown_item_1line,countryList); 
     listView.setAdapter(arrAdapter); 

Ваш код ниже:

setListAdapter(new ArrayAdapter<String>(getApplicationContext(), 
       android.R.layout.simple_dropdown_item_1line, mStringList)); 

На самом деле android.R.layout.simple_dropdown_item_1line используется для выпадающего списка. Я настоятельно рекомендую вам увидеть это содержимое макета один раз. Это просто простой текст. это все. Это свойство не повлияет на вашу задачу. Я проверил, он работает нормально.

1

Если вы хотите сохранить весь стиль, но изменить некоторые детали, вы можете использовать стиль по умолчанию, заданный на Android и изменить то, что вы хотите

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceListItemSmall" 
    android:gravity="center_vertical" 
    android:textColor="@android:color/background_light" 
    android:paddingStart="?android:attr/listPreferredItemPaddingStart" 
    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" 
    android:background="?android:attr/activatedBackgroundIndicator" 
    android:minHeight="?android:attr/listPreferredItemHeightSmall" /> 

Затем установите адаптер с помощью:

setListAdapter(new ArrayAdapter<String>(getApplicationContext(), 
      R.layout.list_item_custom, mStringList)); 

https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/layout/simple_list_item_activated_1.xml

0

Если вы создаете класс, который расширяет Адаптер, вы можете использовать родительскую переменную для получения контекста.

public class MyAdapter extends ArrayAdapter<String> { 
private Context context; 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     context = parent.getContext(); 
     context.getResources().getColor(R.color.red); 
     return convertView; 
    } 
} 

Вы можете сделать то же самое с RecyclerView.Adapter, но вместо GetView() вы будете использовать onCreateViewHolder().

6

Самый простой способ сделать это без необходимости создавать что-либо дополнительно было бы просто изменить простой список TextView:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, android.R.id.text1, strings) { 
      @Override 
      public View getView(int position, View convertView, ViewGroup parent) { 
       TextView textView = (TextView) super.getView(position, convertView, parent); 
       textView.setTextColor({YourColorHere}); 
       return textView; 
      } 
     }; 
+0

метод get view должен возвращать rowView не TextView :) – AlinaBM

+0

Идеальный ответ. Короткие и сладкие. –

+0

Это отлично работает для меня. –

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