Saya memiliki TextView dan saya ingin menambahkan garis hitam di sepanjang batas atas dan bawahnya. Saya mencoba menambahkan android:drawableTop
dan android:drawableBottom
ke TextView, tetapi itu hanya menyebabkan seluruh tampilan menjadi hitam.
<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" />
Apakah ada cara untuk dengan mudah menambahkan batas atas dan bawah ke Tampilan (khususnya, TextView) di Android?
android
border
android-view
textview
emmby
sumber
sumber
Jawaban:
Di android 2.2 Anda bisa melakukan hal berikut.
Buat xml drawable seperti /res/drawable/textlines.xml dan tetapkan ini sebagai properti latar belakang TextView.
/res/drawable/textlines.xml
Sisi buruknya adalah Anda harus menentukan warna latar belakang buram, karena transparansi tidak akan berfungsi. (Setidaknya saya pikir mereka melakukannya tetapi saya salah). Dalam contoh di atas Anda dapat melihat bahwa warna solid dari bentuk pertama #FFdddddd disalin dalam warna bentuk 2 stroke.
sumber
android:color="@null"
untuk menghindari masalah latar belakang buram.Saya telah menggunakan trik agar perbatasan ditampilkan di luar wadah. Dengan trik ini hanya garis yang ditarik sehingga latar belakang akan ditampilkan dari tampilan yang mendasarinya.
sumber
Opsi 1: Shape Drawable
Ini adalah opsi paling sederhana jika Anda ingin perbatasan di sekitar tata letak atau tampilan di mana Anda dapat mengatur latar belakang. Buat file XML di
drawable
folder yang terlihat seperti ini:Anda dapat menghapus
solid
jika Anda tidak ingin isi. Setbackground="@drawable/your_shape_drawable"
pada tata letak / tampilan Anda.Opsi 2: Tampilan Latar Belakang
Berikut adalah sedikit trik yang saya gunakan dalam
RelativeLayout
. Pada dasarnya Anda memiliki kotak hitam di bawah tampilan yang ingin Anda beri batas, dan kemudian memberikan tampilan itu padding (bukan margin!) Sehingga kotak hitam menunjukkan melalui di tepi.Jelas ini hanya berfungsi dengan baik jika tampilan tidak memiliki area transparan. Jika ya saya sarankan Anda menulis kebiasaan
BorderView
yang hanya menggambar perbatasan - seharusnya hanya beberapa lusin baris kode.Jika Anda bertanya-tanya, itu tidak bekerja dengan
adjustViewBounds=true
. Namun, itu tidak berfungsi jika Anda ingin memiliki latar belakang secara keseluruhanRelativeLayout
, karena ada bug yang menghentikan Anda mengisiRelativeLayout
dengan aView
. Dalam hal ini saya akan merekomendasikanShape
digambar.Opsi 3: 9-patch
Opsi terakhir adalah menggunakan draw-draw 9-patch seperti ini:
Anda dapat menggunakannya pada tampilan apa pun di mana Anda dapat mengatur
android:background="@drawable/..."
. Dan ya itu harus 6x6 - Saya mencoba 5x5 dan tidak berhasil.Kerugian dari metode ini adalah Anda tidak dapat mengubah warna dengan sangat mudah, tetapi jika Anda ingin batas mewah (misalnya hanya perbatasan di bagian atas dan bawah, seperti dalam pertanyaan ini) maka Anda mungkin tidak dapat melakukannya dengan
Shape
drawable , yang tidak terlalu kuat.Opsi 4: Tampilan ekstra
Saya lupa menyebutkan opsi yang sangat sederhana ini jika Anda hanya ingin batas di atas dan di bawah tampilan Anda. Anda dapat menempatkan tampilan Anda secara vertikal
LinearLayout
(jika belum) dan kemudian tambahkanView
s kosong di atas dan di bawahnya seperti ini:sumber
Untuk menambahkan
1dp
batas putih di bagian bawah saja dan memiliki latar belakang transparan, Anda dapat menggunakan yang berikut ini yang lebih sederhana daripada kebanyakan jawaban di sini.Untuk tampilan
TextView
atau lainnya, tambahkan:Dan di
drawable
direktori tambahkan XML berikut, yang disebutborderbottom.xml
Jika Anda ingin perbatasan di bagian atas, ubah
android:top="-2dp"
keandroid:bottom="-2dp"
Warnanya tidak harus putih dan latar belakangnya juga tidak perlu transparan.
The
solid
elemen mungkin tidak diperlukan. Ini akan tergantung pada desain Anda (terima kasih V. Kalyuzhnyu).Pada dasarnya, XML ini akan membuat perbatasan menggunakan bentuk persegi panjang, tetapi kemudian mendorong sisi atas, kanan dan kiri di luar area render untuk bentuk. Ini hanya menyisakan batas bawah.
sumber
-2dp
vs1dp
)? Tampaknya bekerja ketika jumlahnya sama (-1
dan1
).-2dp
hasilnya selalu bersih. Saya pikir ada test case di mana hasilnya tidak bersih. Saya tidak ingat apakah itu layar kepadatan rendah atau tinggi atau bahkan versi Android yang lebih lama (2.x mungkin).4dp
untuk lebar goresan yang harus saya gunakan-8dp
untuk penentuan posisi?-5dp
akan semua yang dibutuhkan dengan nilai lebar4pd
. Hanya perlu menjadi sedikit lebih besar untuk mengatasi ketidakakuratan nilai float.Jawaban yang diterima saat ini tidak berfungsi. Ini menciptakan batas vertikal tipis di sisi kiri dan kanan tampilan sebagai hasil dari anti-aliasing.
Versi ini berfungsi dengan baik. Ini juga memungkinkan Anda untuk mengatur lebar perbatasan secara independen, dan Anda juga dapat menambahkan batas di sisi kiri / kanan jika Anda mau. Satu-satunya kelemahan adalah TIDAK mendukung transparansi.
Buat xml drawable yang diberi nama
/res/drawable/top_bottom_borders.xml
dengan kode di bawah ini dan tetapkan sebagai properti latar belakang TextView.Diuji pada Android KitKat melalui Marshmallow
sumber
Jadi saya ingin melakukan sesuatu yang sedikit berbeda: perbatasan di bagian bawah SAJA, untuk mensimulasikan pembagi ListView. Saya mengubah jawaban Piet Delport dan mendapatkan ini:
Catatan menggunakan px dan bukan dp untuk mendapatkan pembagi 1 piksel (beberapa DPI telepon akan membuat garis 1dp menghilang).
sumber
"@color/background_trans_light"
?Seperti yang dikatakan @Nic Hubbard, ada cara yang sangat mudah untuk menambahkan garis perbatasan.
Anda dapat mengubah tinggi dan warna latar belakang ke apa pun yang Anda inginkan.
sumber
Jawaban saya didasarkan pada versi @Emile tapi saya menggunakan warna transparan dan bukan padat.
Contoh ini akan menggambar batas bawah 2dp.
@ color / bgcolor adalah warna latar belakang di mana Anda menggambar tampilan dengan batas.
Jika Anda ingin mengubah posisi perbatasan, ganti offset dengan salah satu dari:
atau gabungkan mereka untuk memiliki 2 batas atau lebih:
sumber
Anda juga dapat membungkus tampilan dalam FrameLayout, kemudian mengatur warna latar belakang bingkai dan padding dengan apa yang Anda inginkan; namun, tampilan teks, secara default memiliki latar belakang 'transparan', jadi Anda perlu mengubah warna latar tampilan teks juga.
sumber
Mengapa tidak membuat tampilan 1dp tinggi dengan warna latar belakang? Maka dapat dengan mudah ditempatkan di tempat yang Anda inginkan.
sumber
Hanya untuk menambahkan solusi saya ke daftar ..
Saya ingin batas bawah semi transparan yang melampaui bentuk aslinya (Jadi perbatasan semi-transparan berada di luar persegi panjang induk).
Yang memberi saya;
sumber
Untuk mengubah ini:
Saya lebih suka pendekatan ini di "drawable / top_bottom_border.xml":
Ini hanya membuat batas, bukan persegi panjang yang akan muncul jika latar belakang Anda memiliki warna.
sumber
Pertama buat file xml dengan konten yang ditunjukkan di bawah ini dan beri nama border.xml dan letakkan di dalam folder layout di dalam direktori res
Setelah itu di dalam menggunakan kode
Ini akan membuat garis hitam di atas dan bawah TextView.
sumber
Tuliskan kode di bawah ini
sumber
Inilah cara untuk mencapainya.
Item pertama untuk stroke dan yang kedua untuk latar belakang yang solid. Menyembunyikan batas kiri dan kanan.
sumber
Cara termudah untuk menambahkan batas pada inset batas menggunakan
InsetDrawable
, berikut ini hanya akan menampilkan batas atas:sumber
Tambahkan file ke res / drawable
Tambahkan tautan pada file ini ke properti latar belakang
sumber
Coba balutkan gambar dengan linearlayout, dan atur latar belakangnya ke warna tepi yang Anda inginkan di sekitar teks. Kemudian atur padding pada tampilan teks menjadi ketebalan yang Anda inginkan untuk batas Anda.
sumber
Anda juga dapat menggunakan 9 jalur untuk melakukan pekerjaan Anda. Buat agar piksel berwarna tidak bertambah banyak tetapi hanya piksel transparan.
sumber
sumber
Cukup tambahkan Tampilan di bagian atas dan bawah
View
sumber
sumber
Cukup Tambahkan TextView ini di bawah teks di mana Anda ingin menambahkan perbatasan
sumber
Hanya untuk menegakkan jawaban @phreakhead dan user1051892 ,
<item android:bottom|android:left|android:right|android:top>
jika negatif, harus lebih besar dari<stroke android:width>
. Jika tidak, lukisan item akan dicampur dengan lukisan stroke dan Anda mungkin berpikir nilai-nilai ini tidak berfungsi.sumber