Я использую макет таблицы для отображения данных в виде таблицы, но мне нужна таблица с определенными пользователем столбцами и строками с границами. Предложения?
источник
Я использую макет таблицы для отображения данных в виде таблицы, но мне нужна таблица с определенными пользователем столбцами и строками с границами. Предложения?
Мое решение этой проблемы состоит в том, чтобы поместить ресурс для рисования xml в фоновое поле каждой ячейки. Таким образом, вы можете определить форму с границей, которую вы хотите для всех ячеек. Единственное неудобство состоит в том, что границы крайних ячеек имеют половину ширины остальных, но это не проблема, если ваша таблица заполняет весь экран.
Пример:
рисуем / cell_shape.xml
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape= "rectangle" >
<solid android:color="#000"/>
<stroke android:width="1dp" android:color="#ff9"/>
</shape>
макет / my_table.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TableRow
android:id="@+id/tabla_cabecera"
android:layout_width="match_parent"
android:layout_height="match_parent"></TableRow>
<TableLayout
android:id="@+id/tabla_cuerpo"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TableRow
android:id="@+id/tableRow1"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/cell_shape"
android:padding="5dp"
android:text="TextView"
android:textAppearance="?android:attr/textAppearanceMedium"></TextView>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/cell_shape"
android:padding="5dp"
android:text="TextView"
android:textAppearance="?android:attr/textAppearanceMedium"></TextView>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/cell_shape"
android:padding="5dp"
android:text="TextView"
android:textAppearance="?android:attr/textAppearanceMedium"></TextView>
</TableRow>
<TableRow
android:id="@+id/tableRow2"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/cell_shape"
android:padding="5dp"
android:text="TextView"
android:textAppearance="?android:attr/textAppearanceMedium"></TextView>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/cell_shape"
android:padding="5dp"
android:text="TextView"
android:textAppearance="?android:attr/textAppearanceMedium"></TextView>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/cell_shape"
android:padding="5dp"
android:text="TextView"
android:textAppearance="?android:attr/textAppearanceMedium"></TextView>
</TableRow>
<TableRow
android:id="@+id/tableRow3"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/cell_shape"
android:padding="5dp"
android:text="TextView"
android:textAppearance="?android:attr/textAppearanceMedium"></TextView>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/cell_shape"
android:padding="5dp"
android:text="TextView"
android:textAppearance="?android:attr/textAppearanceMedium"></TextView>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/cell_shape"
android:padding="5dp"
android:text="TextView"
android:textAppearance="?android:attr/textAppearanceMedium"></TextView>
</TableRow>
<TableRow
android:id="@+id/tableRow4"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/cell_shape"
android:padding="5dp"
android:text="TextView"
android:textAppearance="?android:attr/textAppearanceMedium"></TextView>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/cell_shape"
android:padding="5dp"
android:text="TextView"
android:textAppearance="?android:attr/textAppearanceMedium"></TextView>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/cell_shape"
android:padding="5dp"
android:text="TextView"
android:textAppearance="?android:attr/textAppearanceMedium"></TextView>
</TableRow>
</TableLayout>
</LinearLayout>
Изменить: пример
Edit2: другой пример (с большим количеством элементов: угловые углы, градиенты ...)
Я объяснил эту проблему более подробно в http://blog.intelligenia.com/2012/02/programacion-movil-en-android.html#more . Это на испанском языке, но есть некоторые коды и изображения более сложных таблиц.
view.setBackground(?)
Я должен согласиться с Брэдом. Это был ужасный ответ. Документация Android гласит, что контейнеры TableLayout не отображают границы, поэтому отправка их на сайт Android не поможет им. Мне удалось найти «грязное» решение для droidnova, которое включает в себя установку цвета фона для TableLayout, затем установку другого цвета фона для TableRow и добавление layout_margin в строку. Мне не нравится это решение, но оно работает для границ строк. Я думаю, вы могли бы сделать то же самое с элементами, составляющими каждый элемент «ячейки», но я не проверял.
Пример, похожий на пример на DroidNova:
источник
TableRow
объекте?Если вы просто пытаетесь провести линию между строками (например, чуть выше строки «Итого»), тогда есть простое решение - просто добавьте TableRow с цветом фона и определенной layout_height, такой как эта:
Установите
android:layout_height="1px"
или сколь угодно толстую границу вы хотите. Заполните столько пустых столбцов TextView, сколько вам нужно, чтобы соответствовать остальной части вашей таблицы, или просто используйте один вместе с тем,android:layout_span
как я продемонстрировал.Вывод будет выглядеть примерно так:
Если вы пытаетесь добавить более сложные границы, тогда другие уже опубликованные ответы являются более подходящими.
источник
TextView
когда вы можете использоватьView
вместо? Также не рекомендуется указывать точные пиксели. Вместо этого используйте dp / sp. Смотрите также эту ветку: stackoverflow.com/questions/2025282/… .То, что я хотел, это стол, как это
Я добавил это в моем styles.xml :
Тогда в моей таблице раскладки :
источник
Вы также можете делать это программно, а не через XML, но это немного более "хакерски". Но у человека нет вариантов, и вы не оставляете ему выбора: p .. Вот код:
источник
Чтобы сделать 1dp коллапс-границу вокруг каждой ячейки без написания Java-кода и без создания другого XML-макета с
<shape...>
тегом, вы можете попробовать это решение:В
<TableLayout...>
оныхandroid:background="#CCC"
иandroid:paddingTop="1dp"
иandroid:stretchColumns="0"
В
<TableRow...>
оныхandroid:background="#CCC"
иandroid:paddingBottom="1dp"
иandroid:paddingRight="1dp"
В каждой ячейке / дочернем элементе в TableRow, т.е.
<TextView...>
добавьтеandroid:background="#FFF"
иandroid:layout_marginLeft="1dp"
Очень важно соблюдать отступы и поля, как описано. Это решение будет рисовать границу 1dp, известную как свойство border-collapse в (X) HTML / CSS.
Цвет фона в
<TableLayout...>
а<TableRow...>
представляет цвет линии границы и фон в<TextView...>
заливке ячейки таблицы. Вы можете поместить некоторые отступы в ячейки, если это необходимо.Пример здесь:
источник
Здесь я разработал список следующим изображением дизайна. Мое имя файла списка - Propertylistitem.xml и cellborder.xml используется для рисования фигуры для вывода ячеек, показанной на этом изображении. необходимый код я добавил сюда.
FileName: propertylistitem.xml
filename: cellborder.xml Здесь я просто хочу, чтобы в моем дизайне была только граница, поэтому я оставил комментарий сплошным цветом.
источник
После долгих поисков и часов попыток это самый простой код, который я смог сделать:
TV - это TextView с простым текстом, а содержимое - это мой контейнер (в данном случае LinearLayout). Это немного проще.
источник
setBackgroundDrawable()
можно использовать вместоНу, это может вдохновить вас. Эти шаги показывают, как динамически создавать граничную таблицу.
вот вид таблицы
а здесь строка для использования "attrib_row.xml"
и мы можем добавить этот XML-файл в Drawable, чтобы добавить границу к нашей таблице "border.xml"
и, наконец, вот компактный код, написанный на Kotlin, но его легко конвертировать в Java, если вам нужно
well temps - это список массивов, содержащий данные:
ArrayList<Double>()
и вы можете использовать его в своем фрагменте, например, так
конечный результат выглядит так
источник
Как насчет переопределения метода onDraw, а затем рисования линий на холсте?
источник
Я использовал это решение: в
TableRow
, я создал для каждой ячейкиLinearLayout
с вертикальной линией и фактической ячейкой в ней, и после каждогоTableRow
, я добавил горизонтальную линию.Посмотрите на код ниже:
Надеюсь, это поможет.
источник
Вот отличный способ решить эту проблему:
Создайте прямоугольник, который можно нарисовать с закругленными углами, вот так:
сохраните его в папке drawable с именем rounded_border.xml
Затем создайте относительный макет, который использует округленный_бордер как фон:
сохраните это в папке макета и назовите его table_with_border.xml
затем всякий раз, когда вам понадобится такая таблица, выведите ее в представление, используя синтаксис включения, например так:
Вы, вероятно, захотите добавить некоторый интервал по краям, поэтому просто оберните включение в LinearLayout и добавьте несколько отступов по краям.
Простой и легкий способ получить красивую границу вокруг стола.
источник
Обводка удваивается на средних участках, я использовал этот список слоев:
источник
Я думаю, что лучше всего создать 1-пиксельное изображение из девяти патчей и использовать атрибут showDividers в TableRow и TableLayout, поскольку они оба являются LinearLayouts
источник
Граница между ячейками в ответах выше удваивается. Итак, вы можете попробовать это решение:
источник
Другое решение - использовать линейные макеты и установить разделители между строками и ячейками, например:
Это грязное решение, но оно простое и работает с прозрачным фоном и границами.
источник
Я знаю, что это старый вопрос ... в любом случае ... если вы хотите, чтобы ваш xml был красивым и простым, вы можете расширить TableLayout и переопределить dispatchDraw, чтобы сделать какой-нибудь пользовательский рисунок.
Вот быстрая и грязная реализация, которая рисует прямоугольник вокруг табличного представления, а также горизонтальных и вертикальных полос:
Пример XML с текстом переноса третьего столбца:
источник
Если вам нужна таблица с рамкой, я предлагаю линейное расположение с весом вместо TableLayout.
источник