Скажите, пожалуйста, правильно ли я понял проблему .... Вы хотели бы отметить определенные строки как выбранные, и выбранные строки выглядят визуально с отступом (с другим цветом и полем)?
Вот 2 метода:
1 - Использование StateListDrawable для фона строки:
В этом случае я бы создал файл макета строки списка и установил для свойства "background" значение StateListDrawable (может бытьXML).Это позволит строке переключать визуальные состояния для выбранного и не выбранного.
Атрибутом «drawable» для StateListDrawable будет PNG из 9 патчей, один для невыбранного состояния, которое не содержит полей, и один для выбранного ... выбранный будет определять поле в пределахсам PNG, указав область содержимого / нижнюю черную линию, чтобы она не доходила полностью до левой стороны PNG, оставляя область, которая является вашим немасштабированным полем.
Для людей, которые находят это,Рэдли Маркс только что опубликовал отличный пост по 9 патчу: http://radleymarx.com/blog/simple-guide-to-9-patch/
В ListViews иногда бывает так, что вы хотите отключить «listSelector» (который представляет собой отдельную сущность, отображаемую над списком или позади).и вместо этого используйте атрибут «duplicateParentState», чтобы позволить самой строке отображать выбор (селектор списка не нужен).Это может обеспечить немного больше творческой свободы, особенно если вы хотите иметь поля переменной ширины в определенных строках или несколько типов строк, которые выглядят по-разному.Хотя всецело зависит от дизайна.
2 - Использование полей для каждой строки:
Если вы решили, что вам нужно несколько типов цветовых индикаторов и т. Д., Возможно, вам придется использовать другой подход, предоставляя атрибут margin (который, вероятно, не будет работать сразу) ... Это относится к тому, как LayoutParams используются системой макетов.Я пытаюсь вспомнить точные детали, но я думаю, что это связано с различными типами подкласса LayoutParam и свойствами MarginLayoutParam (или его подкласса), например marginLeft, может быть проигнорирован кодом макета ListView.Вы должны использовать экземпляр AbsListView.LayoutParams, который не содержит параметров для полей.Одним из способов является вложение вашей строки в контейнерное представление (подкласс), которое допускает поля в его LayoutParams *.Я уверен, что я не закончил делать это посторонним вложением, но мне придется покопаться в некотором коде, чтобы запомнить лучшее решение.
Вы упоминаете о том, что поместили ImageView и залили его цветом.Есть несколько альтернатив, на которые вы могли бы обратить внимание ... Наиболее производительным, вероятно, было бы определение собственного класса ListRow и использование onDraw () для фактического рисования содержимого строки самостоятельно, canvas.draw_xyz () для рисования маленькой вкладки цвета,и рисовать текст и т. д. для остальных, а не строить строки в составном макете.Второй метод с использованием макетов будет иметь более легкий веснапример.
* Золотое правило в макете Android: сложная иерархия пользовательского интерфейса - это смерть для производительности, особенно с такими вещами, как ListView.Часто можно избежать этого, используя другие вещи: RelativeLayout, drawableTop (и т. Д.), Изображения с 9-патчами, вместо добавления большего количества видов.
Если я неправильно понял, и вышесказанное слишком просто, пожалуйста, не могли бы вы предоставить более подробную информацию, возможно, схему с указанием точной части, которую вам нужно воспроизвести.