- Tek Eye
- How to Set Text Color in Android ListView
- See Also
- Do you have a question or comment about this article?
- Android ListView Text Color
- 8 Answers 8
- How to change color and font on ListView
- 9 Answers 9
- Not the answer you’re looking for? Browse other questions tagged android listview fonts or ask your own question.
- Linked
- Related
- Hot Network Questions
- Subscribe to RSS
- Changing background color of ListView items on Android
- 18 Answers 18
- ListView
- Знакомьтесь — ListView
- Адаптеры — заполнение списка данными
- Отступление
- Собственная разметка
- android.R.layout.simple_list_item_1
- android.R.layout.simple_list_item_2
- android.R.layout.simple_list_item_checked
- android.R.layout.activity_list_item
- Динамическое заполнение списка
- Прослушивание событий элемента ListView
- Программное нажатие на элемент списка
- ListView не реагирует на нажатия
- Настраиваем внешний вид ListView
- Пользовательский селектор
- Множественный выбор
- Подсветка нажатий
- res/values/colors.xml
- res/drawable/item_selector.xml
- res/drawable-v21/item_selector.xml
- res/values-sw600dp/styles.xml
- Кнопка под списком
- Плавная прокрутка в начало списка или любую позицию
- Настраиваем прокрутку
- ListActivity
- Настройка цвета при достижении края прокрутки
- Нет данных для отображения
- Добавляем шапку и подвал
- res/layout/list_header.xml
- res/layout/list_footer.xml
Tek Eye
Not happy with the default layout of items in a ListView . It is straightforward to provide your own layout to change the ListView item’s visual formatting, such as text color, or font size, background color, etc. To change ListView text color in Android a custom layout is used for the list items. (Instead of using one of Android’s default layouts.) This custom layout can be modified to change the font attributes of the list items, color, bold, size, etc.
(This change text color in ListView tutorial assumes that Android Studio is installed, a basic App can be created and run, and the code in this article can be correctly copied into Android Studio. Adapt the data and code to meet your own requirements. When entering code in Studio add import statements when prompted by pressing Alt-Enter. In this article Amercian color spelling is used and not UK colour in line with the Android SDK)
How to Set Text Color in Android ListView
This Android ListView tutorial assumes that you have a simple one line per entry text list up and running in an Android App. If not see the Tek Eye article Add a Simple List to an App.
Open the App project in Android Studio. Add a new layout file to the project using the Project explorer. To do this use the File menu or context menu (normally right-click) on app in the Project explorer. Select New then XML and Layout XML File. Set the Layout File Name, here called listrow, leave the Root Tag at LinearLayout and Target Source Set unchanged at main. Click Finish and listrow.xml will be created in the res/layout folder.
With listrow.xml open in the Design window use the Palette to drop a Plain TextView from the Widgets list onto the new layout. Now change some of the layout and TextView Properties. Highlight the layout (click a blank area of the device screen shown in the Design window or click LinearLayout in the Component Tree) and change layout:width and layout:height to wrap_content. Select the TextView and change the required font (text) Properties, e.g. set textSize to 20sp (scaled pixels) and textColor to #ff0000 to change the ListView text color to red. If you click on the Text tab the XML should be similar to this:
In the following line of code an ArrayAdapter is created to link a ListView declared as coffeeList to a string array called coffeeChoices. The ArrayAdapter is given the layout listrow and the textView2 id:
Run the App to try out the ListView font changes.
Play with the other layout and TextView properties to see the effect they have. E.g. open textStyle under the Properties list and check bold and italic. The code is available in redlist.zip for download with an instructions.txt on how to import the project into Studio.
See Also
- If a Rendering Problems message is displayed when viewing layouts see the article Android Studio Rendering Problems.
- See the other Android examples on Tek Eye.
Author: Daniel S. Fowler Published: 2016-04-18 Updated: 2016-05-29
Do you have a question or comment about this article?
(Alternatively, use the email address at the bottom of the web page.)
↓markdown↓ CMS is fast and simple. Build websites quickly and publish easily. For beginner to expert.
Free Android Projects and Samples:
Источник
Android ListView Text Color
I am trying to set the ListView textColor to black, since I am using a white background.
Here is my MailActivity
I’m getting the background as white, but am not sure where to set the foreground to black. I’ve tried in the xml and looks like it’s not helping.
8 Answers 8
Ok, here are some things that you should be clear about:
- The background color you are setting in your xml file is of the activity and not of the ListItems you are trying to define.
- Every list item has its own layout file which should be passed or inflated in case you are using complex layout for list item.
I’ll try to explain this with a code sample:
****Lets start with ListItems layout** : save it in your res/layout folder of you Android project with say **list_black_text.xml
Well, a simple layout with a TextView to be precise. You must have an id assigned to TextView in order to use it.
Now coming to you screen/activity/chief layout, as I said you are defining background to your screen with android:background attribute. I see you have defined a TextView there as well and I suspect you are trying to define content/list item there, which is not at all needed.
Here’s your edited layout:
And lastly, most importantly, set your adapter.
Notice the layout resource which we are passing to adapter R.layout.list_black_text , and R.id.list_content which is TextView ID we declared. I have also changed ArrayAdapter to String type since it’s generic.
I hope this explains everything. Mark my answer accepted if you agree.
Messy but a good quick fix way
You can also do this with a quick fix if you do not want to go ahead with complex layout defining etc.
While instantiating the adapter declare an inner class to do this, here is the code sample:
Источник
How to change color and font on ListView
I am trying to change my font(color and size) and the back ground on my ListView. I want to change it with code lines not on xml. my list view looks like: the xml:
what next? please give me an example base on my code
9 Answers 9
You need to create a CustomListAdapter.
The list item looks like this (custom_list.xml):
Use the TextView api’s to decorate your text to your liking
and you will be using it like this
Create a CustomAdapter and in that you have the getView() so there if you want to change the listview background color use this :
If you want to change the textColor then do this :
and for the textSize :
where ‘v’ is the listview and ‘tv’ is the textview
Even better, you do not need to create separate android xml layout for list cell view. You can just use «android.R.layout.simple_list_item_1» if the list only contains textview.
You can select a child like
If u want to set background of the list then place the image before the
and if u want to change color then put color code on above textbox like this
If you just need to change some parameters of the View and the default behavior of ArrayAdapter its OK for you:
If you want to use a color from colors.xml , experiment :
You can use too:
use them in Java code like this:
The getResources() method returns the ResourceManager class for the current activity, and getColor() asks the manager to look up a color given a resource ID
in android 6.0 you can change the colour of text like below
Not the answer you’re looking for? Browse other questions tagged android listview fonts or ask your own question.
Linked
Related
Hot Network Questions
Subscribe to RSS
To subscribe to this RSS feed, copy and paste this URL into your RSS reader.
site design / logo © 2021 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2021.12.3.40888
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.
Источник
Changing background color of ListView items on Android
How can I change background color of ListView items on a per-item basis. When I use android:backgroundColor in the ListView item layout I can achieve this, however the list selector is no longer visible. I can make the selector visible again by setting drawSelectorOnTop to true but then the selector overlays the whole item.
Any ideas how to change those background colors and keep the selector?
PS I would rather not change the selector itself.
EDIT: Authors of GMail application have managed to achieve exactly this so it’s definitely possible.
18 Answers 18
You have to create a different state drawable for each color you want to use.
For example: list_selector_read.xml and list_selector_unread.xml .
All you need to do is set everything to transparent except the android:state_window_focused=»false» item.
Then when you are drawing your list you call setBackgroundResource(R.drawable.list_selector_unread/read) for each row.
You don’t set a listSelector on the ListView at all. That will maintain the default selector for your particular flavor of Android.
This is a modification based on the above code, a simplest code:
I hope you find it useful
Ok, I got it to work like this:
No one seemed to provide any examples of doing this solely using an adapter, so I thought I would post my code snippet for displaying ListViews where the «curSelected» item has a different background:
This has always been a helpful approach for me for when appearance of list items needs to change dynamically.
From the source code of Android’s 2.2 Email App:
Nothing more to say.
the easiest way is this. Inside your ListArrayAdapter just do this
don’t over complicate
Did you mean to change the background color of the custom listitems when you click on it?
You just add the following code to your listview layout in xml.
The list selector here uses default selector which has a dark grey color. You can make your own drawable and assign it to the list selector as above.
Hope this is what you wanted.
Simple code to change all in layout of item (custom listview extends baseadapter):
Following way very slowly in the running
Replaced by the following
By changing a code of Francisco Cabezas, I got the following:
Take a look at List14 example. In getView() you can call convertView.setBackgroundDrawable() for each entry. You could have a class member counter to decide which background to call it with to get alternating backgrounds, for example.
In the list view you can add android:listselector=color name that you want.
this work fine in my app.
The best tutorial on this can be found here.
- Surely call view.setSelected(true) in onItemClick , otherwise the you can’t see the selected item background
- Preserve the order of states in your selector otherwise you’ll see unpredictable behavior in background colors ( state_selected followed by state_pressed )
You can do This.
If the setBackgroundColor is added for onItemClick event, it will not work unless you can put it after the click event.
Try to add debug code in the adapter’s getView method, you will find that getView will be called again whenever you click on the screen. So, after you set the background color, the system will redraw the screen with original setting. Don’t know why it waste resource to rebuild the screen whenever it’s being click, there already have other way that we can notify the system to redraw the screen when needed.
Maybe you can add some control flag to determine the background color for individual row, then modify the getView method to set the color according to this control flag. So, the background color will be changed when it redraw the screen.
I’m also looking for an official solution on it.
Источник
ListView
Знакомьтесь — ListView
В ранних версиях Android компонент ListView был одним из самым популярных элементов интерфейса. Но теперь его время ушло, недаром на панели инструментов студии он находится в разделе Legacy (устаревший код).
ListView представляет собой прокручиваемый список элементов. Очень популярен на мобильных устройства из-за своего удобства. Даже кот способен пользоваться этим элементом, проводя лапкой по экрану вашего телефона.
Компонент ListView более сложен в применении по сравнению с TextView и другим простыми элементами. Работа со списком состоит из двух частей. Сначала мы добавляем на форму сам ListView, а затем заполняем его элементами списка.
Рассмотрим для начала самый простой пример. Поместите на форму компонент ListView и присвойте идентификатор. Вы увидите, что список будет содержать несколько элементов Item и Sub Item.
Однако, если посмотрим XML-код, то там ничего не увидим.
Переходим в класс активности и пишем следующий код:
Вот и всё. Давайте разберёмся с кодом.
Адаптеры — заполнение списка данными
Компоненту ListView требуются данные для наполнения. Источником наполнения могут быть массивы, базы данных. Чтобы связать данные со списком, используется так называемый адаптер.
Адаптер для стандартного списка обычно создаётся при помощи конструкции new ArrayAdapter(Context context, int textViewResourceId, String[] objects).
- context — текущий контекст
- textViewResourceId — идентификатор ресурса с разметкой для каждой строки. Можно использовать системную разметку с идентификатором android.R.layout.simple_list_item_1 или создать собственную разметку
- objects — массив строк
Метод setAdapter(ListAdapter) связывает подготовленный список с адаптером.
Переходим к java-коду. Сначала мы получаем экземпляр элемента ListView в методе onCreate(). Далее мы определяем массив типа String. И, наконец, используем адаптер данных, чтобы сопоставить данные с шаблоном разметки. Выбор адаптера зависит от типа используемых данных. В нашем случае мы использовали класс ArrayAdapter.
Отступление
Если вы будете брать строки из ресурсов, то код будет таким:
А будет еще лучше, если вы воспользуетесь специально предназначенным для этого случая типом ресурса . В файле res/values/strings.xml добавьте следующее:
И тогда в коде используйте для объявления массива строк:
Запустив проект, вы увидите работающий пример прокручиваемого списка. Правда, созданный список пока не реагирует на нажатия. Но при нажатии выбранный элемент выделяется цветным прямоугольником (в версии Android 2.3 был оранжевый, а в Android 4.0 — синий, потом был серый цвет и т.д.).
Собственная разметка
В примере мы используем готовую системную разметку android.R.layout.simple_list_item_1, в которой настроены цвета, фон, высота пунктов и другие параметры. Но нет никаких препятствий самому создать собственную разметку под своё приложение.
Но для начала неплохо бы взглянуть на содержание системной разметки. Студия позволяет увидеть исходный код, достаточно в коде поставить курсор на simple_list_item_1 и нажать на комбинацию клавиш Ctrl+B. Наш simple_list_item_1 выглядит так (в одной из версий):
Мы видим, что в качестве разметки используется TextView с набором атрибутов.
Если говорить о системных разметках, то имеется несколько вариантов. Вкратце ознакомимся с ними.
android.R.layout.simple_list_item_1
Состоит из одного TextView (см. выше)
android.resource.id.text1 |
android.R.layout.simple_list_item_2
Состоит из двух TextView — один побольше сверху и второй поменьше под ним.
android.resource.id.text1 |
android.resource.id.text2 |
android.R.layout.simple_list_item_checked
Справа от CheckedTextView будет находиться флажок
android.resource.id.text1 |
android.R.layout.activity_list_item
Слева от TextView находится значок ImageView с идентификатором android.resource.id.Icon.
android.resource.id.text1 |
Создадим свой шаблон для отдельного пункта списка. Для этого в папке res/layout/ создадим новый файл list_item.xml:
В некоторых случаях желательно установить атрибут android:background=»?android:attr/activatedBackgroundIndicator» у родительского элемента, чтобы элементы списка реагировали на нажатие изменением цвета. Можно задать и собственное поведение.
Вы можете настраивать все атрибуты у TextView, кроме свойства Text, так как текст будет автоматически заполняться элементом ListView программным путём. Ну, а дальше просто меняете в коде системную разметку на свою:
При создании собственного элемента списка, состоящего из TextView можете использовать специальный стиль для минимального размера текста.
Динамическое заполнение списка
Рассмотрим пример динамического заполнения списка, когда список изначально пуст и пользователь сам добавляет новые элементы. Разместим на экране текстовое поле, в котором пользователь будет вводить известные ему имена котов. Когда пользователь будет нажимать на клавишу Enter на клавиатуре, то введённое имя кота будет попадать в список.
При нажатии на Enter мы получаем текст из текстового поля и заносим его в массив. А также оповещаем адаптер об изменении, чтобы список автоматически обновил своё содержание.
У нас получился каркас для чата, когда пользователь вводит текст и он попадает в список. Далее надо получить текст от другого пользователя и также добавить в список. К слову сказать, слово chat с французского означает «кошка». Но это уже совсем другая история.
Прослушивание событий элемента ListView
Нам нужно реагировать на определенные события, генерируемые элементом ListView, в частности, нас интересует событие, которое возникает, когда пользователь нажимает на один из пунктов списка.
В этом нам поможет метод setOnItemClickListener элемента ListView и метод OnItemClick() интерфейса AdapterView.OnItemClickListener.
Теперь при нажатии на любой элемент списка мы получим всплывающее сообщение, содержащее текст выбранного пункта.
Естественно, мы можем не только выводить сообщения, но и запускать новые активности и т.п.
В метод onItemClick() передаётся вся необходимая информация, необходимая для определения нажатого пункта в списке. В приведенном выше примере использовался простой способ — приводим выбранный элемент к объекту TextView, так как известно, что в нашем случае все пункты являются элементами TextView (Для дополнительной проверки можете использовать оператор instanceOf). Мы извлекаем текст из выбранного пункта и сравниваем его со своей строкой.
Также можно проверять атрибут id для определения нажатия пункта списка.
Программное нажатие на элемент списка
Вдруг вам захочется программно нажать на элемент списка. Мы задали код, который будет выполняться при нажатии, в предыдущем примере. Теперь добавим кнопку и напишем код для щелчка.
Код громоздкий, но работоспособный.
ListView не реагирует на нажатия
В некоторых случаях нажатия на пунктах меню не срабатывают. Ниже приводятся несколько возможных причин.
Элемент списка содержит CheckBox, который также имеет свой слушатель нажатий. Попробуйте удалить фокус у него:
Попробуйте переместить OnItemClickListener перед установкой адаптера. Иногда помогает.
Элемент списка содержит ImageButton. Установите фокус в false:
Элемент списка содержит TextView. Если вы используете атрибут android:inputType=»textMultiLine», то замените его на android:minLines/android:maxLines.
Элемент списка содержит TextView, содержащий ссылку на веб-страницу или электронный адрес. Удалите атрибут android:autoLink.
Настраиваем внешний вид ListView
У ListView есть несколько полезных атрибутов, позволяющих сделать список более привлекательным. Например, у него есть атрибут divider, который отвечает за внешний вид разделителя, а также атрибут dividerHeight, отвечающий за высоту разделителя. Мы можем установить какой-нибудь цвет или даже картинку для разделителя. Например, создадим для разделителя цветовой ресурс с красным цветом, а также ресурс размера для его высоты:
Далее присвоим созданный ресурс атрибуту divider, а также зададим его высоту в атрибуте dividerHeight у нашего элемента ListView:
Если вас не устраивает стандартный разделитель, что можете нарисовать какую-нибудь волнистую черту, сохранить ее в PNG-файле и использовать как drawable-ресурс. Проделайте это самостоятельно.
Можно работать с данными атрибутами программно:
Если хотите убрать разделители, то используйте прозрачный цвет.
Заметил, что порядок вызова двух методов важен, если установку высоты вызвать перед установкой цвета разделителя, то метод затирает цвет и результат будет такой же, как с прозрачным цветом.
Обратите внимание, что по умолчанию разделитель не выводится перед первым и последним элементом списка. Если вы хотите изменить эти настройки, то используйте свойства Footer dividers enabled (атрибут footerDividersEnabled) и Header dividers enabled (атрибут headerDividersEnabled):
Пользовательский селектор
Мы уже видели, что по умолчанию выбранный элемент списка выделяется при помощи цветной полоски. Данный селектор также можно настроить через атрибут android:listSelector. Создайте какую-нибудь текстуру для селектора и привяжите его через ресурс. Вот образец текстурированного ореола желтого цвета для селектора.
Нужно подготовить сначала файл res/drawable/selector.xml:
Если вам нужно сразу подсветить нужный элемент списка при запуске программы, то используйте связку двух методов:
Множественный выбор
ListView позволяет выбирать не только один пункт, но и несколько. В этом случае нужно установить свойство Choice Mode в значение multiplyChoice, что соответствует атрибуту android:choiceMode=»multipleChoice».
Также множественный выбор можно установить программно при помощи метода setChoiceMode(ListView.CHOICE_MODE_MULTIPLE).
Теперь, если создать массив строк, например список продуктов для кошачьего завтрака, то получим следующий результат.
Осталось только программно получить отмеченные пользователем элементы списка. Вот мой список продуктов, который я хочу предложить коту. Надеюсь, ему понравится мой выбор. Выбранные элементы будем помещать в TextView:
Если нужно получить отдельно список выбранных и невыбранных элементов списка, то можно написать следующее:
Переменная checked будет содержать список выбранных элементов, а переменная unchecked — список невыбранных элементов.
Следует отметить, что в примерах использовался старый метод getCheckedItemPositions(), доступный с Android 1. В Android 2.2 появился новый метод getCheckedItemIds(). Учтите, что с новым методом можно получить массив только выбранных элементов, хотя в большинстве случаев этого достаточно. Но данный метод требует своих заморочек и в данном моём примере он не заработал.
Подсветка нажатий
На данный момент используется следующая техника подсвечивания элементов списка при нажатии. Здесь учитывается версия Android (до и после API 21).
res/values/colors.xml
res/drawable/item_selector.xml
res/drawable-v21/item_selector.xml
Разница заключается в том, что в версии 21 рекомендуется использовать серый цвет с применением ripple.
Созданные ресурсы следует применить для фона элемента списка (list_item.xml): android:background=»@drawable/item_selector».
Для проверки установим режим singleChoice для активации выбранного элемента списка.
Обычно режим активации выбранного элемента списка применяют для двухпанельной разметки, а в телефонах такой режим не используют. В таких случаях удобнее создать специальный стиль для списка.
Создадим стиль для планшетов.
res/values-sw600dp/styles.xml
А в обычном styles.xml оставим заглушку.
Теперь применим стиль к списку и нужное поведение с активацией будет применяться только на планшетах.
При повороте выбранный пункт списка может оказаться за пределами экрана. С помощью метода smoothScrollToPosition() мы можем автоматически прокрутить список к нужному месту. Код показан в продвинутых приёмах.
Кнопка под списком
Если вы хотите разместить кнопку под списком, которая бы не зависела от количества элементов в ListView, то воспользуйтесь весом (layout_weight).
Плавная прокрутка в начало списка или любую позицию
У списка есть специальный метод smoothScrollToPosition(), позволяющий плавно прокрутить до нужного места. Достаточно в методе указать номер позиции для прокрутки:
Учтите, что если элементов в списке несколько сотен и вы запустите плавную прокрутку указанным способом, то процесс может растянуться надолго. Например, коты могут и заснуть, не дождавшись конца операции. Задумайтесь.
Настраиваем прокрутку
У ListView есть атрибуты для настройки внешнего вида полосы прокрутки
Аналогично это применимо к полосам прокрутки у ScrollView, EditText и т.д.
ListActivity
Если вам нужна форма, состоящая только из списка, то вам проще воспользоваться системным классом ListActivity вместо стандартного Activity. Именно такой подход описан в документации по ListView. Пример работы описан в статье ListActivity — создаём прокручиваемый список.
Настройка цвета при достижении края прокрутки
Когда прокрутка достигает конца (сверху или снизу), то выводится цветовой эффект. В API 21 появилась возможность управлять этим эффектом через атрибут colorEdgeEffect:
Далее применяем как тему.
Для более старых устройств такую настройку сделать нельзя.
Нет данных для отображения
Если адаптер не содержит данных для отображения, то можете вызвать метод для показа пустой разметки:
Добавляем шапку и подвал
В подвалах часто живут коты, поэтому списки желательно также снабжать подвалом (и шапкой). У ListView есть такая возможность, давайте воспользуемся этим.
Элементами шапки и подвала могут послужить View, которые могут быть добавлены к списку сверху и снизу через методы addHeaderView() и addFooterView(). В принципе оба элемента одинаковы, только добавляются в разные места списка.
Полный варианты методов:
- v – компонент, который отобразится, как пункт списка
- data – объект, связанный с этим пунктом списка
- isSelectable – можно ли будет кликать на пункт или выделять его
Интересно, что до версии API 19 шапку и подвал можно было добавлять только до присвоения списку адаптера, иначе возникала ошибка. Теперь можно добавлять в любое время, ошибки не будет и список будет работать.
Для демонстрации подойдёт любой урок со списком. Дополнительно добавим два файла для шапки и подвала (можно также воспользоваться системной разметкой). Если по структуре шапка и подвал одинаковы, то можно обойтись и одним файлом. Но для разнообразия сделаем их немного разными.
res/layout/list_header.xml
res/layout/list_footer.xml
Осталось подключить шапку и подвал к списку. Напоминаю, что можете использовать любой пример со списком. Поэтому часть кода опущу.
Никто не запрещает использовать несколько шапок и подвалов в списке. Соответствующий код закомментирован.
Шапка состоит из двух текстовых меток. В первой метке текст задан в макете, а во второй текст устанавливается программно. Подвал сделан ещё проще — только одна метка, текст задан в макете. Естественно, вы можете реализовать более сложный макет в вашем приложении.
Шапку и подвал можно удалить программно через методы removeHeaderView() и removeFooterView().
Источник