Ответ 1
# 1 Две позиции:
Макет minHeight
равен 72dp, layout_height
- wrap_content
. Размер значка - 40dp (обычно это растровое изображение круга). Значок имеет верхнее поле 16dp и 16dp левое поле, другое.
Оба TextView
находятся в вертикально ориентированном и вертикально центрированном LinearLayout
. Этот макет имеет левый край 16dp и правый край 16dp. Это позволит вам удалить изображение и сохранить неповрежденные боковые поля. Первая строка имеет обычно textApperance="@style/TextAppearance.AppCompat.Body2"
, а вторая строка имеет Body1
. Текстовый макет имеет 16dp верх и 16dp нижний padding (он должен быть дополнен здесь, потому что нижнее поле не соблюдается для детей RelativeLayout
- и полезно другое время). Теперь вы можете поместить несколько строк во второй TextView
, и весь элемент будет хорошо расширяться.
Не забудьте установить layout_toRightOf="@+id/icon"
и layout_alignWithParentIfMissing="true"
в макете текста. Если у вас есть другой значок (или виджет) справа, добавьте layout_toLeftOf="@+id/right_icon"
. Если не использовать layout_alignParentRight="true"
. Это растянет макет, чтобы занять все свободное место. Или вы можете использовать LinearLayout
.
Поместите это в список в своей области содержимого. В списке не должно быть никаких дополнений сверху или снизу, это будет хорошо выглядеть.
# 2 Отдельные позиции в содержании
То же, что и номер 1 со следующими отличиями: minHeight
или layout_height
установлено в 56dp. Не используйте никаких вертикальных полей или отступов, просто центрируйте все по вертикали. Используйте только один текст строки.
Используйте это в списке с дополнением 8dp или заголовком 48dp вверху и заполнением 8dp внизу. В противном случае он будет выглядеть "обрезанным".
# 3 Отдельные позиции в меню
То же, что и номер 2 со следующими отличиями: высота 48dp. Значок 24dp. Значок должен иметь следующие атрибуты:
android:layout_width="40dp"
android:layout_height="wrap_content"
android:scaleType="fitStart"
Это позволит вам помещать любую иконку с 1dp на 40dp, не нарушая баланс (вам не нужно менять интервал между значком и текстом, поскольку он остается 40dp, как в предыдущих случаях).
Я использую это в навигационном ящике и меню.
EDIT: Примечание
В спецификациях говорится, что поля слева и справа должны быть 24dp вместо 16dp для планшетов (sw600dp). Вы можете решить эту проблему, добавив на табличках левый и правый элементы макета 8dp (используйте динамические значения).
В спецификациях также указывается, что разделитель между элементами (если они есть) должен быть частью элемента. Вы должны определить "общий размер левого края" 72dp для телефонов и 80dp для планшетов и использовать его в качестве левого поля для представления разделителя. Вторая проблема заключается в том, что на планшетах у вас есть 8dp правильное дополнение. Я говорю это: если вы используете ListView
, завинтите спецификации и установите пользовательский разделитель, который будет окрашиваться между элементами. Если вы используете RecyclerView
, напишите приятный ItemDecorator
, который добавит делитель над элементом.
РЕДАКТИРОВАТЬ 2
?listPreferredPaddingLeft
и ?listPreferredPaddingRight
будет расширяться до 16dp на телефонах и 24dp на планшетах (соблюдая настройки RTL). Вы можете использовать эти значения для левого и правого заполнения в элементах списка. Затем 40dp зарезервировано для значка, интервал 16dp и, наконец, контент.