Cara menyembunyikan underbar di EditText

496

Bagaimana saya bisa menyembunyikan bagian bawah EditText (baris prompt dengan serif kecil di ujungnya)?

Mungkin ada cara yang lebih baik untuk melakukan apa yang saya inginkan: Saya memiliki tata letak dengan EditText. Biasanya, ini menampilkan baik-baik saja di mana pengguna dapat mengetuknya dan mulai memasukkan atau mengedit teks.

Namun, kadang-kadang, saya ingin menggunakan tata letak yang sama (menyederhanakan logika lain) untuk menampilkan data yang sama dengan cara hanya baca. Saya ingin presentasi serupa - seharusnya memiliki tinggi dan font yang sama, tetapi tidak memiliki underbar.

Sebagai ukuran stop-gap, saya akan menerapkan ini dengan menghapus EditText dan mengganti TextView. Saya pikir itu akan memberikan hasil yang diinginkan, tetapi sepertinya jalan memutar cara yang mahal untuk melakukan sesuatu yang seharusnya mudah dilakukan dengan mengubah atribut.

Peri Hartman
sumber
Kemungkinan duplikat? stackoverflow.com/questions/5478109/…
Mohamed Taher Alrefaie

Jawaban:

1052

Anda dapat mengatur EditTextagar gambar transparan yang dapat digambar atau hanya digunakan

android:background="@android:color/transparent"

atau

android:background="@null"

atau secara terprogram

editText.setBackgroundResource(android.R.color.transparent);
ha1ogen
sumber
7
Jawaban terbaik, seperti yang dikatakan ha1ogen, adalah membuat custom yang dapat digambar. Mulai dengan 9-tambalan yang digunakan untuk bidang EditText normal. Ubah untuk menghapus bagian bawah dan grafis lain yang tidak Anda inginkan. Dengan ini, EditText Anda yang dimodifikasi akan memiliki margin dan tampilan keseluruhan yang sama dengan bidang EditText normal. Jika Anda hanya mengatur latar belakang ke nol, itu akan kehilangan margin.
Peri Hartman
124
gunakan ini:android:background="@android:color/transparent"
dd619
3
bagaimana jika saya sudah memiliki latar belakang warna lain, katakanlah abu-abu, bagaimana cara menghapus underbar / garis bawah dalam kasus itu?
Narendra Singh
6
Di Android 19, menggunakan android:background="@android:color/transparent"penyebab masalah hilangnya margin yang sama ... Apakah ada contoh di mana saja seseorang membuat custom drawable seperti itu?
Anti Earth
2
Bagaimana kita bisa melakukan pemrograman di java?
jagdish
100

Atur latar belakang ke nol.

android:background="@null"
Vinayak V Naik
sumber
2
Itu sama dengan background = "# 00000000". Tidak benar-benar berfungsi.
Peri Hartman
14
Ini bekerja untuk saya, tetapi akhirnya saya lakukan android:background="@android:color/transparentkarena @nullmenakutkan.
Dick Lucas
3
@ Richard mengapa @nullmenakutkan?
Michael
@null akan menunjukkan tidak ada latar belakang. Jika kita tentukan background = "# 00000000" itu akan menggambar latar belakang putih dengan nilai alpha "0".
Vinayak V Naik
2
"@null" juga menyembunyikan kursor yang berkedip, "@android: warna / transparan" tidak.
Lukas Novak
37

Anda dapat mengatur EditText's backgroundTintnilai untuk warna tertentu. Jika Anda mengatur warna transparan, underbar seharusnya hilang.

android:backgroundTint="@color/Transparent"

<color name="Transparent">#00000000</color>

Tetapi Anda dapat menggunakan ini dalam Api v21(Lollipop)atau lebih tinggi

Yasin Kaçmaz
sumber
Ini jauh lebih baik daripada mengubah latar belakang seluruh tampilan (seperti yang disarankan oleh jawaban lain)
Alex Semeniuk
26

Harap tetapkan latar belakang edittext Anda sebagai

android:background="#00000000"

Itu akan berhasil.

kishore kumar
sumber
3
Ini akan semacam pekerjaan, tetapi tidak dengan benar. Jika Anda hanya menghapus latar belakang Anda juga akan kehilangan margin di sekitar bidang - mereka adalah bagian dari latar belakang default. Solusi yang tepat adalah dengan mengganti latar belakang yang berbeda yang sama sekali tidak memiliki underbar di dalamnya, seperti yang disarankan @ ha1ogen
Peri Hartman
1
Cara membatalkan ini secara programatik
Tushar Narang
23

Anda dapat melakukannya secara terprogram menggunakan setBackgroundResource:

editText.setBackgroundResource(android.R.color.transparent);
Roberto
sumber
Saya tidak tahu mengapa, tetapi tidak berhasil. salurannya masih ada
Syed Hissaan
15

Yang saya lakukan adalah membuat Shape drawable dan mengaturnya sebagai latar:

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <padding
        android:top="8dp"
        android:bottom="8dp"
        android:left="8dp"
        android:right="8dp" />

    <solid android:color="#fff" />

</shape>

Catatan: Saya benar-benar menggunakan @dimendan @colornilai untuk firelds, tapi saya sudah menyederhanakan file bentuk di sini untuk kejelasan.

Paul LeBeau
sumber
1
Ini juga merupakan opsi yang sangat baik. Ini variasi pada pengaturan yang dapat digambar khusus.
Peri Hartman
15

Menggunakan salah satu properti:

android:background="@null"

ATAU

android:background="@android:color/transparent"

berhasil bagi saya untuk menyembunyikan garis bawah EditText.

Namun, harap dicatat bahwa hal itu kemudian menyebabkan masalah jarak dengan TextInputLayout yang saya telah mengelilingi EditText

Kode Ajay
sumber
1
Masalah spasi datang dari tata letak kesalahan. Untuk memperbaikinya, atur properti errorEnabled dari TextInputLayout ke aplikasi palsu: errorEnabled = "false"
Ulbo
12

Berikut cara untuk menyembunyikannya, tanpa merusak lapisan default:

fun View.setViewBackgroundWithoutResettingPadding(background: Drawable?) {
    val paddingBottom = this.paddingBottom
    val paddingStart = ViewCompat.getPaddingStart(this)
    val paddingEnd = ViewCompat.getPaddingEnd(this)
    val paddingTop = this.paddingTop
    ViewCompat.setBackground(this, background)
    ViewCompat.setPaddingRelative(this, paddingStart, paddingTop, paddingEnd, paddingBottom)
}

pemakaian:

editText.setViewBackgroundWithoutResettingPadding(null)

Memperbarui:

Jika Anda selalu melewati nol, Anda dapat mengkodifikasikannya dalam metode (dan Anda mungkin juga akan kelebihan EditText itu sendiri)

fun EditText.removeUnderline() {
    val paddingBottom = this.paddingBottom
    val paddingStart = ViewCompat.getPaddingStart(this)
    val paddingEnd = ViewCompat.getPaddingEnd(this)
    val paddingTop = this.paddingTop
    ViewCompat.setBackground(this, null)
    ViewCompat.setPaddingRelative(this, paddingStart, paddingTop, paddingEnd, paddingBottom)
}

// usage:
editText.removeUnderline()
pengembang android
sumber
Jawaban ini sempurna dan harus diterima. Itu dapat menghapus latar belakang tanpa menghapus padding default.
Pankaj Kumar
6

Anda harus menetapkan minWidth juga, jika tidak kursor akan hilang jika teksnya kosong.

        <EditText
            android:id="@+id/et_card_view_list_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:minWidth="30dp"
            android:layout_weight="1"
            android:inputType="text"
            android:text="Name"
            android:background="@android:color/transparent"
            />
cinta hidup
sumber
6

Dalam kasus saya, saya menggunakan latar belakang kustom untuk mengedit teks sehingga pengaturan latar belakang ke @null atau pengaturan warna untuk transparan bukan solusi bagi saya jadi saya memainkan sedikit trik yang bekerja dengan baik saya hanya mengatur

android:inputType="textVisiblePassword"

dan itu menyelesaikan pekerjaan dengan cukup baik .. ini bukan solusi optimal tetapi berhasil

Harvinder Singh
sumber
1
Saya suka ini dalam hubungannya dengan latar belakang transparan karena menyembunyikan bilah yang muncul di bawah teks saat mengetik - semua yang saya inginkan adalah teks, tidak ada hiasan.
Maret
1
Jawaban ini adalah satu-satunya yang bekerja untuk saya karena kotak edittext saya dibuat secara programatik dan masing-masing memiliki warna latar belakang yang berbeda sehingga latar belakang tidak dapat nol dan bergantung pada warna latar belakang orang tua
Sharone Lev
5

Saya memiliki sesuatu seperti ini yang sangat sangat berguna:

generalEditText.getBackground().mutate().setColorFilter(getResources().getColor(R.color.white), PorterDuff.Mode.SRC_ATOP);

di mana generalEditText adalah EditText saya dan warna putih adalah:

<color name="white">#ffffff</color>

Ini tidak akan menghapus padding dan EditText Anda akan tetap apa adanya. Hanya garis di bagian bawah yang akan dihapus. Terkadang lebih bermanfaat untuk melakukannya seperti ini.

Jika Anda menggunakan android:background="@null"sebanyak yang disarankan Anda kehilangan padding dan EditText menjadi lebih kecil. Setidaknya, itu adalah kasus saya.

Sedikit catatan tambahan adalah jika Anda menetapkan latar belakang nol dan mencoba kode java yang saya berikan di atas, aplikasi Anda akan macet tepat setelah menjalankannya. (karena memiliki latar belakang tetapi nol.) Mungkin jelas tapi saya pikir menunjukkan itu penting.

bengongon97
sumber
4

Saya menemukan hal yang paling aneh! Jika Anda mengaturnya untuk nullmenggunakan Pengikatan Data: android:background="@{null}"

Maka tidak hanya latar belakang dihapus, tetapi tampilan masih memiliki lapisan yang dihitung dari latar belakang default. Jadi karena alasan tertentu pengaturan null yang ditangguhkan tidak menghapus lapisan dari bg sebelumnya ..? Padding pada view adalah kiri / atas / kanan 4dp, 13dp bawah (dari level emulator 21).

Mungkin tidak memiliki hasil akhir yang sama di semua level API, jadi waspadalah! Seseorang memberi tahu saya jika Anda menguji ini dan merasa dapat diandalkan. (Perhatikan juga bahwa bantalan bawah menonjol karena garis bawah yang asli. Jadi, Anda mungkin ingin mengubahnya dalam XML, atau mengatur ulangnya dalam kode setelah dimuat ke atas ...

androidguy
sumber
4

jika teks edit Anda sudah memiliki latar belakang maka Anda dapat menggunakan berikut ini.

android:textCursorDrawable="@null"
AKASH WANGALWAR
sumber
Meskipun ini tidak menyelesaikan pertanyaan, itu membantu saya.
Rubén Viguera
4

Jika Anda ingin ini memengaruhi semua instance EditText dan kelas apa pun yang mewarisi darinya, maka Anda harus menetapkan nilai atribut untuk theme Anda, editTextBackground di tema Anda.

  <item name="android:editTextBackground">@drawable/bg_no_underline</item>

Contoh dari drawable yang saya gunakan adalah:

<inset xmlns:android="http://schemas.android.com/apk/res/android"
     android:insetLeft="@dimen/abc_edit_text_inset_horizontal_material"
     android:insetRight="@dimen/abc_edit_text_inset_horizontal_material"
     android:insetTop="@dimen/abc_edit_text_inset_top_material"
     android:insetBottom="@dimen/abc_edit_text_inset_bottom_material">
    <selector>
      <item android:drawable="@android:color/transparent"/>
    </selector>
</inset>

Ini adalah versi yang sedikit dimodifikasi dari apa implementasi desain material standar.

Ketika diterapkan itu akan membuat semua EditText Anda menghapus garis bawah di seluruh aplikasi, dan Anda tidak harus menerapkan gaya untuk masing-masing dan setiap orang secara manual.

kingargyle
sumber
4

Cukup Gunakan Ini

 editText.setBackgroundColor(Color.TRANSPARENT);
Kute Prashant
sumber
2

Anda juga dapat menentukan STYLE untuk editText Anda sehingga Anda dapat mengelompokkan kembali semua properti secara umum. Ini sangat kuat jika Anda harus mengedit beberapa teks yang perlu memiliki perilaku

Masukkan kode ke res / values ​​/ styles.xml

<style name="MyEditTextStyle" parent="@android:style/TextAppearance.Widget.EditText">
    <item name="android:background">@color/transparence</item> //NO UNDERBAR
    <item name="android:maxLines">1</item>
    <item name="android:height">28dp</item> //COMMON HEIGHT
</style>

Setelah itu Anda hanya perlu menyebutnya di editText Anda

<EditText
    android:id="@+id/edit1"
    style="@style/MyEditTextStyle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

<EditText
    android:id="@+id/edit2"
    style="@style/MyEditTextStyle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
Dagnogo Jean-François
sumber
1

Gunakan secara terprogram: editText.setBackground(null)

Dari xmlpenggunaan:android:background="@null"

Shubham Kaushik
sumber
1
android:background="@android:color/transparent"

Atau

android:background="@null"
Pengecualian Null Pointer
sumber
1

android: inputType = "textVisiblePassword | textMultiLine" android: background = "@ android: color / transparan"

... ini bukan solusi optimal tetapi berhasil.

Carles Garrigues
sumber
0

Atur latar belakang ke nol

android:background="@null" in your xml 
Jocelin
sumber
0

Dalam kasus saya, editText.setBackgroundResource(R.color.transparent);yang terbaik.

Itu tidak menghapus padding default, hanya di bawah bar.

R.color.transparent = #00000000

Lagu HJ
sumber
0

jika Anda menggunakan latar belakang maka Anda harus menggunakan tag ini

android:testCursorDrawable="@null" 
ATIQ UR REHMAN
sumber
0

Untuk mempertahankan margin dan warna latar belakang gunakan:

background.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <padding
        android:bottom="10dp"
        android:left="4dp"
        android:right="8dp"
        android:top="10dp" />

    <solid android:color="@android:color/transparent" />

</shape>

Edit Teks:

<androidx.appcompat.widget.AppCompatEditText
    android:id="@+id/none_content"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/background"
    android:inputType="text"
    android:text="First Name And Last Name"
    android:textSize="18sp" />
itabdullah
sumber