Спасибо за отличный совет. Просто к сведению, копирование вставило мне исключение во время выполнения, сказав: «XmlPullParserException: для двоичного XML-файла <4> градиент <градиент> требует, чтобы атрибут 'angle' был кратным 45". Легко исправляется, если изменить угол на 270.
Allclaws
Спасибо за исправление ... Но я не знаю, почему это могло произойти .. Вы нашли какую-то конкретную причину?
Легенда
@teedyay: В любое время приятель :)
Легенда
1
как и во всех правилах, угол должен быть кратным 45: «XmlPullParserException: двоичный XML-файл, строка # 4 Тег <градиента> требует, чтобы атрибут« угла »был кратным 45»
Юсеф
29
Тем не менее, он плохо работает с выделением выделения: когда выбран верхний или нижний элемент, его цветной фон имеет прямоугольную форму и рисуется поверх фона с закругленными углами.
Крис Ван Баел
56
Хотя это сработало, оно также убрало весь цвет фона. Я искал способ сделать только границу и просто заменить этот код XML-макета на этот, и я был в порядке!
Если у вас возникли проблемы с выделением, выделите верхнюю и нижнюю строку, где при выделении отображается фоновый прямоугольник, вам нужно установить селектор для вашего списка в прозрачный цвет.
это не сработало для меня. Однако я добавил следующую строку, и она избавилась от нее:android:cacheColorHint="@android:color/transparent"
Цезарь
1
Это определенно исправило проблему выбора для меня - спасибо! Вы также можете использовать android.R.color.transparent для цвета селектора вместо создания своего собственного.
greg7gkb
3
Вместо того чтобы делать это программно, добавьте это в свой ListView в макете XML, чтобы скрыть выделенный цвет: android: listSelector = "# 00000000"
Elad Nava
@alvins Есть ли способ сделать Layout выбираемым для выделения как элемент списка?
Бхарат Додея
Что мне делать, если я хочу использовать непрозрачный цвет для listSelector?
suitianshi
3
Другие ответы очень полезны, спасибо авторам!
Но я не мог понять, как настроить прямоугольник при выделении элемента при выделении, а не отключить выделение @alvins @bharat dojeha.
Следующее работает для меня, чтобы создать контейнер элемента представления с округленным списком без контура и светло-серого, когда выбран ту же форму:
Ваш xml должен содержать селектор, например, например (в res / drawable / customshape.xml):
и нужно также «скрыть» прямоугольник селектора по умолчанию, например, в onCreate (я также скрываю свою тонкую серую разделительную линию между элементами):
Решение в эти дни состоит в том, чтобы использовать CardViewвстроенную поддержку с закругленными углами.
Оригинальный ответ *
Другой способ, который я нашел, - замаскировать макет, нарисовав изображение поверх макета. Это может помочь вам. Проверьте Android XML закругленные обрезанные углы
Еще одно решение для выделения выделения проблем с первым и последним элементами в списке:
Добавьте отступы сверху и снизу фона списка, равного или превышающего радиус. Это гарантирует, что выделение выделения не пересекается с вашими угловыми кривыми.
Это самое простое решение, когда вам нужна непрозрачная подсветка выделения.
<?xml version="1.0" encoding="utf-8"?><shapexmlns:android="http://schemas.android.com/apk/res/android"><solidandroid:color="@color/listbg"/><strokeandroid:width="2dip"android:color="#D5D5D5"/><cornersandroid:radius="10dip"/><!-- Make sure bottom and top padding match corner radius --><paddingandroid:bottom="10dip"android:left="2dip"android:right="2dip"android:top="10dip"/></shape>
Это было невероятно удобно для меня. Я хотел бы предложить другой обходной путь, чтобы идеально выделить закругленные углы, если вы используете свой собственныйCustomAdapter .
Определение файлов XML
Прежде всего, зайдите в свою папку для рисования и создайте 4 различные формы:
Я использую пользовательский вид, который я размещаю поверх других, и который просто рисует 4 маленьких угла того же цвета, что и фон. Это работает независимо от содержимого представления и не выделяет много памяти.
Ответы:
Вот один из способов сделать это (хотя благодаря документации Android!):
Добавьте следующее в файл (скажем, customshape.xml) и затем поместите его в (res / drawable / customshape.xml)
Когда вы закончите создание этого файла, просто установите фон одним из следующих способов:
Через код:
listView.setBackgroundResource(R.drawable.customshape);
Через XML просто добавьте следующий атрибут в контейнер (например, LinearLayout или в любые поля):
Надеюсь, кто-то найдет это полезным ...
источник
Хотя это сработало, оно также убрало весь цвет фона. Я искал способ сделать только границу и просто заменить этот код XML-макета на этот, и я был в порядке!
источник
@ Крис-ван-Баел
Если у вас возникли проблемы с выделением, выделите верхнюю и нижнюю строку, где при выделении отображается фоновый прямоугольник, вам нужно установить селектор для вашего списка в прозрачный цвет.
В color.xml просто добавьте следующее -
источник
android:cacheColorHint="@android:color/transparent"
Другие ответы очень полезны, спасибо авторам!
Но я не мог понять, как настроить прямоугольник при выделении элемента при выделении, а не отключить выделение @alvins @bharat dojeha.
Следующее работает для меня, чтобы создать контейнер элемента представления с округленным списком без контура и светло-серого, когда выбран ту же форму:
Ваш xml должен содержать селектор, например, например (в res / drawable / customshape.xml):
Затем вам нужно реализовать адаптер списка и переопределить метод getView, чтобы установить пользовательский селектор в качестве фона.
и нужно также «скрыть» прямоугольник селектора по умолчанию, например, в onCreate (я также скрываю свою тонкую серую разделительную линию между элементами):
Этот подход решает общее решение для элементов рисования, а не только ListViewItem с различными состояниями выбора.
источник
Обновить
Решение в эти дни состоит в том, чтобы использовать
CardView
встроенную поддержку с закругленными углами.Оригинальный ответ *
Другой способ, который я нашел, - замаскировать макет, нарисовав изображение поверх макета. Это может помочь вам. Проверьте Android XML закругленные обрезанные углы
источник
Еще одно решение для выделения выделения проблем с первым и последним элементами в списке:
Добавьте отступы сверху и снизу фона списка, равного или превышающего радиус. Это гарантирует, что выделение выделения не пересекается с вашими угловыми кривыми.
Это самое простое решение, когда вам нужна непрозрачная подсветка выделения.
источник
на самом деле, я думаю, что лучшее решение описано по этой ссылке:
http://blog.synyx.de/2011/11/android-listview-with-rounded-corners/
короче говоря, он использует другой фон для верхнего, среднего и нижнего элементов, так что верхний и нижний элементы будут округлены.
источник
Это было невероятно удобно для меня. Я хотел бы предложить другой обходной путь, чтобы идеально выделить закругленные углы, если вы используете свой собственный
CustomAdapter
.Определение файлов XML
Прежде всего, зайдите в свою папку для рисования и создайте 4 различные формы:
shape_top
shape_normal
shape_bottom
shape_rounded
Теперь создайте разные макеты строк для каждой фигуры, то есть для
shape_top
:Вы также можете сделать это программно, изменив фон.
И определите селектор для каждого формируемого списка, то есть для
shape_top
:Измените свой CustomAdapter
Наконец, определите параметры макета внутри вашего
CustomAdapter
:И это сделано!
источник
чтобы создать рамку, нужно создать еще один XML-файл со свойством solid и углов в папке drawable и вызвать его в фоновом режиме
источник
Я использую пользовательский вид, который я размещаю поверх других, и который просто рисует 4 маленьких угла того же цвета, что и фон. Это работает независимо от содержимого представления и не выделяет много памяти.
источник