Здравствуйте, я хочу воссоздать этот "дизайн" в представлении Android. По сути, это ровная граница вокруг TextView.
Я создал TextView:
<TextView
android:id = "@+id/textView4"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "R"
android:textSize = "30sp"
android:background = "@drawable/border_red"
android:gravity = "center" />
И я добавил фигуру, которую можно рисовать:
<?xml version = "1.0" encoding = "utf-8" ?>
<shape xmlns:android = "http://schemas.android.com/apk/res/android"
android:shape = "rectangle">
<solid android:color = "@android:color/transparent"/>
<stroke
android:width = "4dp"
android:color = "#ff687b" />
<corners android:radius = "4dp"/>
<padding android:right = "0dp" android:left = "0dp" android:bottom = "0dp" android:top = "0dp"/>
</shape>
Странное поведение в программе предварительного просмотра Android и в приложении. Я получаю такое странное поведение:
Я еще не определил отступы. Все они настроены на 0dp, но кажется, что у границы уже есть какие-то поля / отступы.
Такое поведение затрудняет создание ровной прямоугольной границы вокруг персонажа. :-(
В чем проблема, что я делаю не так?
используя линейный макет в качестве родительского и добавьте к нему границу, не имеет значения, чем добавление границы в текстовое представление
ты ошибаешься .. но ок.
Используйте android:includeFontPadding = "false", чтобы удалить отступ шрифта с TextView
<TextView
android:id = "@+id/textView4"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "R"
android:textSize = "30sp"
android:includeFontPadding = "false"
android:background = "@drawable/border_red"
android:gravity = "center" />
Это удалит большую часть padding сверху и снизу TextView.
Чтобы получить идеальный квадрат, вам нужно передать исправления width и height на TextView.
@rubiktubik вы пробовали вышеуказанное решение?
Я пробовал это решение, оно немного лучше, но я все еще не могу дать равные отступы к границе. Использование фиксированной ширины и высоты может быть проблемой на разных экранах
@rubiktubik нет способа уменьшить размеры TextView до точного размера текста с точностью до пикселя. Для желаемого результата необходимо указать фиксированный размер вместо wrap_content. А также на изображении (R) левый и правый отступы больше, чем верхний и нижний отступ. Таким образом, вы можете получить результат, задав различное заполнение для top and bottom и left and right.
это не лучшее решение. смотри мой ответ. давать представление статической ширины и высоты нехорошо, поскольку есть устройства, которые меньше / больше, когда дело доходит до dp. Я не буду голосовать против получения ненависти, но это неправильно @PrithviBhola
@DroiDev Я не понимаю, зачем оборачивать TextView внутри LinearLayout. Это не будет иметь никакого значения. И я предложил использовать разные отступы для top and bottom и left and right, что является необходимым случаем.
Если вы этого не одобряете, ничего страшного. Я показываю вам, чтобы вы учились. :)
Используя тот же XML, что и выше ...
Вот мой макет.
<?xml version = "1.0" encoding = "utf-8"?>
<LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:app = "http://schemas.android.com/apk/res-auto"
xmlns:tools = "http://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
tools:context = "com.vzw.www.myapplication.MainActivity"
android:orientation = "vertical"
android:padding = "10dp">
<LinearLayout
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:background = "@drawable/red_border"
android:padding = "10dp">
<TextView
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:includeFontPadding = "false"
android:text = "H"
android:textStyle = "bold"/>
</LinearLayout>
</LinearLayout>
Вот результат этого ...
Вы также можете добиться этого, создав собственный TextView ... но я не буду вдаваться в это ... но если хотите, можете. На самом деле это даже лучшее решение.
В этом случае также неправильное заполнение top and bottom и left and right. Пожалуйста, проверьте образ (R) в вопросе, заполнение top and bottom и left and right отличается. Таким образом, требуется разное заполнение для top and bottom и left and right.
тогда создание пользовательского представления лучше, чем я начал.
В случае пользовательского представления вы также будете программно предоставлять другое заполнение, что аналогично предоставлению его в XML. Потому что, если вы заметили, высота текста больше, чем его ширина, и нам нужен квадратный вид, поэтому вам нужно указать разные отступы.
не когда вы работаете с Paint / Rect / Canvas. вы можете нарисовать произвольную рамку. Советую разобраться. вы можете полностью исключить отступы, найти высоту, посчитать и рассчитать правильные отступы.
поместите текстовое представление внутри линейного или относительного макета ... добавьте отступы к этому макету ... а затем добавьте границу к ТО, а не к текстовому представлению.