Intereting Posts
Как развернуть текст для обтекания изображения Регистрация HTTP-запросов / ответов с помощью Fiddler на эмуляторе Android Android Studio: Android-устройство не отображает мое устройство Как скрыть кнопку меню для одного действия Очки для запоминания при тестировании приложения для Android Как исключить определенные сообщения по имени TAG с помощью Android adb logcat? Как найти «последнюю страницу» в пейджере просмотра. Или общее число просмотров. Разработка Android Android ContextCompat.checkSelfPermission () не найден Как получить доступ к датчику сердечного ритма Android RAW DATA? (Отраженный свет, а не сердцебиение) Почему Android использует концепцию Java вместо языка D или C или C ++? Но веб-браузер Chromium находится на C ++, его очень сложное совпадение Динамически добавлять необязательные параметры в запросы API Прослушивание определенного порта для входящих данных Вызов java-метода из c ++ в Android Чтение / запись в тег NFC с защитой паролем Как обновить AndroidManifest.XML в resources.arsc, используя инструмент aapt для Android, используя терминал

Есть ли простой способ добавить границу к верхней и нижней части Android View?

У меня есть TextView, и я бы хотел добавить черную границу вдоль ее верхней и нижней границ. Я попробовал добавить android:drawableTop и android:drawableBottom в TextView, но это только заставило весь вид стать черным.

 <TextView android:background="@android:color/green" android:layout_width="fill_parent" android:layout_height="wrap_content" android:drawableTop="@android:color/black" android:drawableBottom="@android:color/black" android:text="la la la" /> 

Есть ли способ легко добавить верхнюю и нижнюю границу в представление (в частности, TextView) в Android?

Solutions Collecting From Web of "Есть ли простой способ добавить границу к верхней и нижней части Android View?"

В Android 2.2 вы можете сделать следующее.

Создайте xml drawable, например /res/drawable/textlines.xml, и назначьте это как свойство фона TextView.

 <TextView android:text="My text with lines above and below" android:background="@drawable/textlines" /> 

/res/drawable/textlines.xml

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item> <shape android:shape="rectangle"> <stroke android:width="1dp" android:color="#FF000000" /> <solid android:color="#FFDDDDDD" /> </shape> </item> <item android:top="1dp" android:bottom="1dp"> <shape android:shape="rectangle"> <stroke android:width="1dp" android:color="#FFDDDDDD" /> <solid android:color="#00000000" /> </shape> </item> </layer-list> 

Нижняя сторона этого заключается в том, что вам нужно указать непрозрачный цвет фона, поскольку прозрачные пленки не будут работать. (По крайней мере, я думал, что они сделали, но я ошибся). В приведенном выше примере вы можете видеть, что сплошной цвет первой формы #FFdddddd копируется во втором цвете штрихов.

Я использовал трюк, чтобы граница отображалась вне контейнера. С помощью этой трюки создается только линия, поэтому фон будет показан для основного представления.

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:bottom="1dp" android:left="-2dp" android:right="-2dp" android:top="-2dp"> <shape android:shape="rectangle" > <stroke android:width="1dp" android:color="#FF000000" /> <solid android:color="#00FFFFFF" /> <padding android:left="10dp" android:right="10dp" android:top="10dp" android:bottom="10dp" /> </shape> </item> </layer-list> 1 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:bottom="1dp" android:left="-2dp" android:right="-2dp" android:top="-2dp"> <shape android:shape="rectangle" > <stroke android:width="1dp" android:color="#FF000000" /> <solid android:color="#00FFFFFF" /> <padding android:left="10dp" android:right="10dp" android:top="10dp" android:bottom="10dp" /> </shape> </item> </layer-list> 1 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:bottom="1dp" android:left="-2dp" android:right="-2dp" android:top="-2dp"> <shape android:shape="rectangle" > <stroke android:width="1dp" android:color="#FF000000" /> <solid android:color="#00FFFFFF" /> <padding android:left="10dp" android:right="10dp" android:top="10dp" android:bottom="10dp" /> </shape> </item> </layer-list> 

Вариант 1: Форма, пригодная для рисования

Это самый простой вариант, если вам нужна рамка вокруг макета или вида, в которой вы можете установить фон. Создайте XML-файл в папке с возможностью drawable которая выглядит примерно так:

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <solid android:color="#8fff93" /> <stroke android:width="1px" android:color="#000" /> </shape> 

Вы можете удалить solid если вы не хотите заливки. Установленный background="@drawable/your_shape_drawable" на вашем макете / представлении.

Вариант 2: Фоновый вид

Вот небольшой трюк, который я использовал в RelativeLayout . В основном у вас есть черный квадрат под видом, который вы хотите дать границе, а затем дайте этому виду некоторое дополнение (не margin!), Чтобы черный квадрат показывался по краям.

Очевидно, что это работает только в том случае, если в представлении нет прозрачных областей. Если это так, я бы рекомендовал вам написать пользовательский BorderView который только рисует границу – это должно быть всего несколько десятков строк кода.

 <View android:id="@+id/border" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/image" android:layout_alignLeft="@+id/image" android:layout_alignRight="@+id/image" android:layout_alignTop="@+id/main_image" android:background="#000" /> <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_... android:padding="1px" android:src="@drawable/..." /> 

Если вам интересно, это работает с adjustViewBounds=true . Однако это не сработает, если вы хотите иметь фон во всем RelativeLayout , потому что есть ошибка, которая останавливает вас при добавлении RelativeLayout с помощью View . В этом случае я бы рекомендовал Shape пригодную для рисования.

Вариант 3: 9-патч

Окончательный вариант – использовать 9-патч, как показано на рисунке:

Вы можете использовать его в любом представлении, где вы можете установить android:background="@drawable/..." . И да, это должно быть 6×6 – я пробовал 5×5, и это не сработало.

Недостатком этого метода является то, что вы не можете легко изменить цвета, но если вам нужны фантастические границы (например, только граница сверху и снизу, как в этом вопросе), вы не сможете сделать их с помощью Shape Который не очень мощный.

Вариант 4: Дополнительные виды

Я забыл упомянуть этот очень простой вариант, если вам нужны только границы выше и ниже вашего представления. Вы можете поместить свой вид в вертикальный LinearLayout (если его еще нет), а затем добавить пустой View сверху и снизу так:

 <View android:background="#000" android:layout_width="match_parent" android:layout_height="1px"/> 

Чтобы добавить только 1dp границу 1dp и иметь прозрачный фон, вы можете использовать следующее, которое проще, чем большинство ответов здесь.

Для TextView или другого представления добавьте:

 android:background="@drawable/borderbottom" 

И в drawable каталоге добавьте следующий XML, называемый borderbottom.xml

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:top="-2dp" android:left="-2dp" android:right="-2dp"> <shape android:shape="rectangle"> <stroke android:width="1dp" android:color="#ffffffff" /> <solid android:color="#00000000" /> </shape> </item> </layer-list> 

Если вы хотите получить границу вверху, измените android:top="-2dp" на android:bottom="-2dp"

Цвет не обязательно должен быть белым, а фон также не должен быть прозрачным.

В принципе, этот XML будет создавать границу с использованием формы прямоугольника, но затем толкает верхнюю, правую и левую стороны за область рендеринга для фигуры. Это оставляет видимость нижней границы.

Поэтому я хотел сделать что-то немного другое: только на нижней границе, чтобы имитировать разделитель ListView. Я изменил ответ Пиета Дельпорта и получил следующее:

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item> <shape android:shape="rectangle"> <solid android:color="@color/background_trans_light" /> </shape> </item> <!-- this mess is what we have to do to get a bottom border only. --> <item android:top="-2dp" android:left="-2dp" android:right="-2dp" android:bottom="1px"> <shape android:shape="rectangle"> <stroke android:width="1dp" android:color="@color/background_trans_mid" /> <solid android:color="@null" /> </shape> </item> </layer-list> 

Обратите внимание, используя px вместо dp, чтобы получить ровно 1 пиксельный разделитель (некоторые DPI-устройства сделают линию 1 дп).

Текущий принятый ответ не работает. Он создает тонкие вертикальные границы с левой и правой сторон зрения в результате сглаживания.

Эта версия работает отлично. Он также позволяет вам устанавливать ширину границы независимо друг от друга, и вы также можете добавить границы слева / справа, если хотите. Единственным недостатком является то, что он НЕ поддерживает прозрачность.

Создайте xml /res/drawable/top_bottom_borders.xml с именем /res/drawable/top_bottom_borders.xml с приведенным ниже кодом и назначьте его как свойство фона TextView.

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> <solid android:color="#DDDD00" /> <!-- border color --> </shape> </item> <item android:bottom="1dp" android:top="1dp"> <!-- adjust borders width here --> <shape android:shape="rectangle"> <solid android:color="#FFFFFF" /> <!-- background color --> </shape> </item> </layer-list> 1 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> <solid android:color="#DDDD00" /> <!-- border color --> </shape> </item> <item android:bottom="1dp" android:top="1dp"> <!-- adjust borders width here --> <shape android:shape="rectangle"> <solid android:color="#FFFFFF" /> <!-- background color --> </shape> </item> </layer-list> 

Протестировано на Android KitKat через Marshmallow

Вы также можете обернуть представление в FrameLayout, а затем установить цвет фона и дополнение к тому, что вы хотите; Тем не менее, textview по умолчанию имеет «прозрачный» фон, поэтому вам также нужно будет изменить цвет фона textview.

Так же, как @Nic Hubbard сказал, есть очень простой способ добавить пограничную линию.

 <View android:layout_width="match_parent" android:layout_height="2dp" android:background="#000000" > </View> 

Вы можете изменить высоту и цвет фона на все, что хотите.

Мои ответы основаны на версии @Emile, но я использую прозрачный цвет вместо твердого.
В этом примере будет показана нижняя граница 2dp.

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item> <shape android:shape="rectangle" > <stroke android:width="2dp" android:color="#50C0E9" /> <solid android:color="@android:color/transparent" /> </shape> </item> <item android:bottom="2dp" > <shape android:shape="rectangle" > <stroke android:width="2dp" android:color="@color/bgcolor" /> <solid android:color="@android:color/transparent" /> </shape> </item> </layer-list> 

@ Color / bgcolor – это цвет фона, на котором вы рисуете свой вид с помощью границы.

Если вы хотите изменить положение границы, смещение должно быть смещено:

 android:bottom="2dp" android:top="2dp" android:right="2dp" android:left="2dp" 

Или объединить их с двумя или более границами:

 android:bottom="2dp" android:top="2dp" 

Почему бы просто не создать вид с разрешением 1 дп с фоном? Тогда его можно легко разместить там, где вы хотите.

Сначала создайте xml-файл с содержимым, показанным ниже, и назовите его border.xml и поместите его внутри папки макета внутри каталога res

 <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <stroke android:width="1dp" android:color="#0000" /> <padding android:left="0dp" android:top="1dp" android:right="0dp" android:bottom="1dp" /> </shape> 

После этого внутри кода используйте

 TextView tv = (TextView)findElementById(R.id.yourTextView); tv.setBackgroundResource(R.layout.border); 

Это сделает черную линию сверху и снизу TextView.

Записать ниже код

 <View android:layout_width="wrap_content" android:layout_height="2dip" android:layout_below="@+id/topics_text" android:layout_marginTop="7dp" android:layout_margin="10dp" android:background="#ffffff" /> 

Просто добавьте мое решение в список.

Мне нужна полупрозрачная нижняя граница, которая простирается от первоначальной формы (так что полупрозрачная граница была вне родительского прямоугольника).

 <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item> <shape android:shape="rectangle" > <solid android:color="#33000000" /> <!-- Border colour --> </shape> </item> <item android:bottom="2dp" > <shape android:shape="rectangle" > <solid android:color="#164586" /> </shape> </item> </layer-list> 

Что дает мне;

Введите описание изображения здесь

Чтобы изменить это:

 <TextView android:text="My text" android:background="@drawable/top_bottom_border" /> 

Я предпочитаю этот подход в «drawable / top_bottom_border.xml»:

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape> <gradient android:angle="270" android:startColor="#000" android:centerColor="@android:color/transparent" android:centerX="0.01" /> </shape> </item> <item> <shape> <gradient android:angle="90" android:startColor="#000" android:centerColor="@android:color/transparent" android:centerX="0.01" /> </shape> </item> </layer-list> 

Это только делает границы, а не прямоугольник, который будет отображаться, если ваш фон имеет цвет.

Попробуйте обернуть изображение с помощью linearlayout и установите его в качестве фона для цвета границы, который вы хотите по тексту. Затем установите для прописной части текст, который вам нужен для вашей границы.

Вы также можете использовать 9-путь для выполнения своей работы. Создайте его так, чтобы цветной пиксель не размножался по высоте, а только прозрачный пиксель.

 <TextView android:id="@+id/textView3" android:layout_width="match_parent" android:layout_height="2dp" android:background="#72cdf4" android:text=" aa" /> 

Просто добавьте этот TextView под текстом, в который вы хотите добавить границу

 // Just simply add border around the image view or view <ImageView android:id="@+id/imageView2" android:layout_width="90dp" android:layout_height="70dp" android:layout_centerVertical="true" android:layout_marginRight="10dp" android:layout_toLeftOf="@+id/imageView1" android:background="@android:color/white" android:padding="5dip" /> // After that dynamically put color into your view or image view object objView.setBackgroundColor(Color.GREEN); //VinodJ/Abhishek