วิธีการซ่อนแถบใต้ใน EditText


496

ฉันจะซ่อนแถบใต้ EditText ได้อย่างไร (บรรทัดที่พรอมต์ที่มี serif เล็ก ๆ ที่ท้าย)?

อาจมีวิธีที่ดีกว่าในการทำสิ่งที่ฉันต้องการ: ฉันมีเลย์เอาต์ที่มี EditText โดยปกติจะแสดงผลดีที่ผู้ใช้สามารถแตะที่มันและเริ่มเข้าหรือแก้ไขข้อความ

อย่างไรก็ตามบางครั้งฉันต้องการใช้เค้าโครงเดียวกัน (ลดความซับซ้อนของตรรกะอื่น ๆ ) เพื่อแสดงข้อมูลเดียวกันในลักษณะอ่านอย่างเดียว ฉันต้องการให้งานนำเสนอใกล้เคียงกัน - ควรมีความสูงและแบบอักษรเดียวกัน แต่ไม่มีแถบใต้

ในฐานะที่เป็นมาตรการหยุดช่องว่างฉันจะใช้สิ่งนี้โดยการลบ EditText และแทนที่ TextView ฉันคิดว่ามันจะให้ผลลัพธ์ที่ต้องการ แต่ดูเหมือนว่าวงเวียนจะเป็นวิธีที่มีราคาแพงในการทำสิ่งที่ควรจะทำได้ง่ายโดยการเปลี่ยนคุณลักษณะ


เป็นไปได้ซ้ำไหม stackoverflow.com/questions/5478109/…
Mohamed Taher Alrefaie

คำตอบ:


1052

คุณสามารถตั้งค่าEditTextให้มี drawable โปร่งใสแบบกำหนดเองหรือเพียงแค่ใช้

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

หรือ

android:background="@null"

หรือโดยทางโปรแกรม

editText.setBackgroundResource(android.R.color.transparent);

7
คำตอบที่ดีที่สุดอย่างที่ ha1ogen กล่าวไว้คือการสร้าง drawable ที่กำหนดเองได้ เริ่มต้นด้วย 9-patch ที่ใช้สำหรับฟิลด์ EditText ปกติ ปรับเปลี่ยนเพื่อแยกแถบด้านล่างและกราฟิกอื่น ๆ ที่คุณไม่ต้องการ ด้วยสิ่งนี้ EditText ที่คุณแก้ไขจะมีระยะขอบและลักษณะโดยรวมเหมือนกับฟิลด์ EditText ปกติ หากคุณเพียงแค่ตั้งค่าพื้นหลังเป็นโมฆะมันจะสูญเสียระยะขอบ
Peri Hartman

124
ใช้สิ่งนี้:android:background="@android:color/transparent"
dd619

3
ถ้าฉันมีพื้นหลังของสีอื่นอยู่แล้วให้พูดว่าสีเทาวิธีลบแถบด้านล่าง / ขีดเส้นใต้ในกรณีนั้น?
Narendra Singh

6
ใน Android 19 การใช้android:background="@android:color/transparent"ทำให้เกิดปัญหาการสูญเสียระยะขอบเท่ากัน ... มีตัวอย่างจากใครบางคนที่สร้าง drawable แบบกำหนดเองได้หรือไม่?
ต่อต้านโลก

2
เราจะเขียนโปรแกรมเป็นจาวาได้อย่างไร?
jagdish

100

ตั้งค่าพื้นหลังเป็นค่าว่าง

android:background="@null"

2
เป็นเช่นเดียวกับ background = "# 00000000" ใช้งานไม่ได้จริง ๆ
Peri Hartman

14
สิ่งนี้ใช้ได้สำหรับฉัน แต่ฉันก็ลงเอยandroid:background="@android:color/transparentเพราะทำ@nullน่ากลัว
Dick Lucas

3
@ ริชาร์ดทำไม@nullน่ากลัว?
ไมเคิล

@null จะระบุว่าไม่มีพื้นหลังอยู่ ถ้าเราระบุ background = "# 00000000" มันจะวาดพื้นหลังสีขาวด้วยค่าอัลฟา "0"
Vinayak V Naik

2
"@null" ซ่อนเคอร์เซอร์กะพริบเช่นกัน "@android: color / transparent" ไม่
Lukas Novak

37

คุณสามารถตั้งค่าEditTextของ backgroundTintสีที่ต้องการได้ หากคุณตั้งค่าสีโปร่งใสแถบด้านล่างควรหายไป

android:backgroundTint="@color/Transparent"

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

แต่คุณสามารถใช้สิ่งนี้ในApi v21(Lollipop)หรือสูงกว่า


นี้เป็นวิธีที่ดีกว่าการเปลี่ยนพื้นหลังของมุมมองทั้งหมด (เป็นคำตอบอื่น ๆ แนะนำ)
อเล็กซ์ Semeniuk

26

โปรดตั้งค่าพื้นหลัง edittext ของคุณเป็น

android:background="#00000000"

มันจะทำงาน.


3
มันจะเรียงลำดับของการทำงาน แต่ไม่ถูกต้อง หากคุณเพียงแค่ลบพื้นหลังคุณจะสูญเสียระยะขอบรอบสนาม - มันเป็นส่วนหนึ่งของพื้นหลังเริ่มต้น วิธีการแก้ปัญหาที่เหมาะสมคือการเปลี่ยนพื้นหลังที่แตกต่างกันซึ่งไม่ได้มี underbar ในนั้นตามที่ @ ha1ogen แนะนำ
Peri Hartman

1
วิธีการยกเลิกการเขียนโปรแกรมนี้
Tushar Narang

23

คุณสามารถทำได้โดยใช้โปรแกรมsetBackgroundResource:

editText.setBackgroundResource(android.R.color.transparent);

ฉันไม่รู้ว่าทำไม แต่ไม่ได้ผล บรรทัดยังคงอยู่ที่นั่น
Syed Hissaan

15

สิ่งที่ฉันทำคือการสร้างรูปร่างที่วาดได้และตั้งเป็นพื้นหลัง:

<?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>

หมายเหตุ: ฉันใช้@dimenและ@colorค่าสำหรับ firelds จริง แต่ฉันได้ทำให้ไฟล์รูปร่างง่ายขึ้นเพื่อความชัดเจน


1
นี่เป็นตัวเลือกที่ดีอย่างสมบูรณ์แบบเช่นกัน มันเป็นรูปแบบของการตั้งค่า drawable ที่กำหนดเอง
Peri Hartman

15

ใช้คุณสมบัติอย่างใดอย่างหนึ่ง:

android:background="@null"

หรือ

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

ทำงานให้ฉันเพื่อซ่อนขีดเส้นใต้ของ EditText

อย่างไรก็ตามโปรดทราบว่ามันจะทำให้เกิดปัญหาระยะห่างกับ TextInputLayout ที่ฉันล้อมรอบ EditText


1
ปัญหาระยะห่างมาจากเค้าโครงข้อผิดพลาด เพื่อแก้ไขที่ตั้งค่าคุณสมบัติ errorEnabled ของ TextInputLayout เป็น app false: errorEnabled = "false"
Ulbo

12

นี่คือวิธีซ่อนโดยไม่ทำให้ช่องว่างภายในเริ่มต้น:

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)
}

การใช้งาน:

editText.setViewBackgroundWithoutResettingPadding(null)

ปรับปรุง:

หากคุณพบว่าตัวเองกำลังผ่าน null คุณสามารถประมวลผลในวิธีการ (และจากนั้นคุณอาจเกิน EditText เอง)

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()

คำตอบนี้สมบูรณ์แบบและควรได้รับการยอมรับ มันสามารถลบพื้นหลังโดยไม่ต้องลบการขยายเริ่มต้น
Pankaj Kumar

6

คุณต้องตั้งค่า minWidth ด้วยมิฉะนั้นเคอร์เซอร์จะหายไปหากข้อความนั้นว่างเปล่า

        <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"
            />

6

ในกรณีของฉันฉันใช้พื้นหลังแบบกำหนดเองสำหรับแก้ไขข้อความดังนั้นการตั้งค่าพื้นหลังเป็น @null หรือการตั้งค่าโทนสีเป็นโปร่งใสไม่ใช่วิธีแก้ปัญหาสำหรับฉันดังนั้นฉันจึงเล่นเล่ห์เหลี่ยมเล็กน้อยซึ่งเหมาะกับฉันมากฉันเพิ่งตั้ง

android:inputType="textVisiblePassword"

และทำให้งานทำได้ค่อนข้างดี .. มันไม่ใช่ทางออกที่ดีที่สุด แต่ใช้ได้


1
ฉันชอบสิ่งนี้ร่วมกับพื้นหลังโปร่งใสเพราะซ่อนแถบที่ปรากฏใต้ข้อความขณะพิมพ์ - ทั้งหมดที่ฉันต้องการคือข้อความไม่มีการตกแต่ง
19Craig

1
คำตอบนี้เป็นเพียงหนึ่งเดียวที่ทำงานสำหรับฉันตั้งแต่กล่อง edittext ของฉันถูกสร้างขึ้นโดยทางโปรแกรมและแต่ละคนมีสีพื้นหลังที่แตกต่างกันดังนั้นพื้นหลังไม่สามารถเป็นโมฆะและขึ้นอยู่กับสีพื้นหลังของผู้ปกครอง
Sharone Lev

5

ฉันมีสิ่งนี้ซึ่งมีประโยชน์มาก:

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

โดยที่ generalEditText คือ EditText ของฉันและสีขาวคือ:

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

สิ่งนี้จะไม่ลบการขยายและ EditText ของคุณจะยังคงเหมือนเดิม เฉพาะบรรทัดที่ด้านล่างจะถูกลบออก บางครั้งการทำเช่นนี้มีประโยชน์มากกว่า

หากคุณใช้android:background="@null"หลายข้อเสนอแนะคุณจะสูญเสียการขยายและ EditText จะเล็กลง อย่างน้อยมันก็เป็นกรณีของฉัน

ข้อสังเกตเล็กน้อยคือถ้าคุณตั้งค่าเป็นพื้นหลังเป็นโมฆะและลองใช้รหัส java ที่ฉันให้ไว้ข้างต้นแอปของคุณจะทำงานล้มเหลวทันทีหลังจากดำเนินการ (เพราะมันทำให้พื้นหลังเป็นโมฆะ) มันอาจจะชัดเจน แต่ฉันคิดว่าการชี้ให้เห็นนั้นสำคัญ


4

ฉันค้นพบสิ่งที่อยากรู้อยากเห็นมากที่สุด! หากคุณตั้งค่าเป็นnullใช้การเชื่อมข้อมูล: android:background="@{null}"

จากนั้นไม่เพียง แต่จะลบพื้นหลังเท่านั้น แต่มุมมองยังคงมีช่องว่างภายในที่คำนวณจากพื้นหลังเริ่มต้น ดังนั้นด้วยเหตุผลบางอย่างการตั้งค่าเป็นโมฆะเลื่อนไม่ได้ล้างช่องว่างภายในจาก bg .. ก่อนหน้านี้? ช่องว่างภายในมุมมองด้านซ้าย / ด้านบน / ขวา 4dp, ด้านล่าง 13dp (จากตัวจำลองระดับ 21)

อาจไม่ได้ผลลัพธ์ที่เหมือนกันในทุกระดับ API ดังนั้นโปรดระวัง! มีคนบอกฉันถ้าคุณทดสอบและพบว่าเชื่อถือได้ (โปรดทราบว่าการเติมช่องว่างด้านล่างนั้นยื่นออกมาเนื่องจากขีดเส้นใต้ที่อยู่ในต้นฉบับดังนั้นคุณอาจต้องการเปลี่ยนใน XML หรือรีเซ็ตในรหัสหลังจากโหลดไปด้านบนเท่ากัน ...


4

หากข้อความแก้ไขของคุณมีพื้นหลังอยู่แล้วคุณสามารถใช้สิ่งต่อไปนี้

android:textCursorDrawable="@null"

แม้ว่านี่จะไม่สามารถแก้ปัญหาได้ แต่มันก็ช่วยฉันได้
Rubén Viguera

4

หากคุณต้องการให้สิ่งนี้ส่งผลกระทบต่ออินสแตนซ์ทั้งหมดของ EditText และคลาสใด ๆ ที่สืบทอดมาจากนั้นคุณควรกำหนดค่าของแอททริบิวเป็น editTextBackground ในธีมของคุณ

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

ตัวอย่างของ drawable ฉันใช้คือ:

<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>

นี่เป็นเวอร์ชั่นที่ได้รับการแก้ไขเล็กน้อยซึ่งการใช้งานการออกแบบวัสดุเริ่มต้นคืออะไร

เมื่อนำไปใช้มันจะทำให้ EditText ของคุณลบเส้นใต้ตลอดทั้งแอพและคุณไม่จำเป็นต้องใช้สไตล์กับแต่ละคนด้วยตนเอง



2

คุณยังสามารถกำหนดสไตล์สำหรับ editText ของคุณเพื่อให้คุณสามารถจัดกลุ่มคุณสมบัติทั้งหมดเหมือนกัน มันมีประสิทธิภาพมากถ้าคุณต้องแก้ไขข้อความหลายข้อความที่จำเป็นต้องมีพฤติกรรม

วางรหัสใน 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>

หลังจากนั้นคุณเพียงแค่เรียกมันใน editText ของคุณ

<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" />



1

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

... มันไม่ใช่ทางออกที่ดีที่สุด แต่ใช้ได้



0

ในกรณีของฉัน editText.setBackgroundResource(R.color.transparent);ดีที่สุด

มันไม่ได้เป็นการลบการแพ็ดเริ่มต้นใต้แถบ

R.color.transparent = #00000000



0

ในการคงไว้ซึ่งทั้งระยะขอบและสีพื้นหลังให้ใช้:

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>

แก้ไขข้อความ:

<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" />
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.