EditText में अंडरबार कैसे छिपाएं


496

मैं EditText अंडरबार (छोरों पर थोड़ा सेरिफ़ के साथ प्रॉम्प्ट लाइन) कैसे छिपा सकता हूं?

एक बेहतर तरीका हो सकता है कि मैं क्या चाहता हूं: मेरे पास एक EditText के साथ एक लेआउट है। आम तौर पर, यह ठीक प्रदर्शित होता है जहां उपयोगकर्ता उस पर टैप कर सकता है और पाठ दर्ज करना या संपादित करना शुरू कर सकता है।

कभी-कभी, हालांकि, मैं एक ही डेटा को पढ़ने के लिए एक ही लेआउट (अन्य तर्क को सरल करता है) का उपयोग करना चाहूंगा। मैं चाहता हूं कि प्रस्तुति समान हो - इसमें समान ऊंचाई और समान फ़ॉन्ट होना चाहिए, लेकिन अंडरबार नहीं होना चाहिए।

एक स्टॉप-गैप उपाय के रूप में, मैं इसे EditText को हटाकर और TextView को प्रतिस्थापित करके लागू करने जा रहा हूं। मुझे लगता है कि यह वांछित परिणाम देगा, लेकिन ऐसा लगता है कि एक राउंडअबाउट कुछ ऐसा करने के लिए एक महंगा तरीका है जिसे विशेषताओं को बदलकर करना आसान होना चाहिए।


जवाबों:


1052

आप EditTextएक कस्टम पारदर्शी ड्रॉ करने योग्य या बस उपयोग करने के लिए सेट कर सकते हैं

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

या

android:background="@null"

या प्रोग्रामिक रूप से

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

7
सबसे अच्छा जवाब, जैसा कि ha1ogen कहता है, एक कस्टम ड्रॉबल बनाना है। 9-पैच के साथ शुरू करें जो सामान्य EditText फ़ील्ड के लिए उपयोग किया जाता है। अंडरबार और अन्य ग्राफिक्स को बाहर निकालने के लिए इसे संशोधित करें जो आप नहीं चाहते हैं। इसके साथ, आपके संशोधित EditText में समान EditText फ़ील्ड के समान मार्जिन और समग्र स्वरूप होगा। यदि आप पृष्ठभूमि को अशक्त करने के लिए सेट करते हैं, तो यह मार्जिन खो देगा।
पेरी हार्टमैन

124
इसका उपयोग करें:android:background="@android:color/transparent"
dd619

3
क्या होगा अगर मैं पहले से ही अन्य रंग की पृष्ठभूमि वाला हूं, तो ग्रे को यह कहने दें कि उस मामले में अंडरबार / अंडरलाइन कैसे निकालें?
नरेंद्र सिंह

6
एंड्रॉइड 19 में, android:background="@android:color/transparent"मार्जिन के एक ही नुकसान का कारण बनता है ... क्या कोई ऐसा उदाहरण है जो इस तरह के एक कस्टम ड्रॉ करने योग्य है?
एंटी अर्थ

2
हम जावा में प्रोग्रामेटिक रूप से कैसे कर सकते हैं?
जगदीश

100

पृष्ठभूमि को शून्य पर सेट करें।

android:background="@null"

2
वह पृष्ठभूमि = "# 00000000" के समान है। वास्तव में काम नहीं करता है।
पेरी हार्टमैन

14
यह मेरे लिए काम करता है लेकिन मैंने खत्म कर दिया android:background="@android:color/transparentक्योंकि @nullयह डरावना है।
डिक लुकास

3
@ रिचर्ड क्यों @nullडरावना है?
माइकल

@ कोई भी पृष्ठभूमि मौजूद नहीं होने का संकेत देगा। यदि हम पृष्ठभूमि = "# 00000000" निर्दिष्ट करते हैं, तो यह अल्फा मान "0" के साथ सफेद पृष्ठभूमि को आकर्षित करेगा।
विनायक वी नाइक

2
"@null" ब्लिंकिंग कर्सर को भी छुपाता है, "@android: color / पारदर्शी" नहीं।
लुकास नोवाक

37

आप सेट कर सकते हैं EditTextकी backgroundTintएक विशिष्ट रंग के लिए मूल्य। यदि आप पारदर्शी रंग सेट करते हैं, तो अंडरबार जाना चाहिए।

android:backgroundTint="@color/Transparent"

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

लेकिन आप इसमें Api v21(Lollipop)या इससे अधिक का उपयोग कर सकते हैं


यह पूरे दृश्य की पृष्ठभूमि को बदलने से बेहतर है (जैसा कि अन्य उत्तर सुझाते हैं)
एलेक्स सेमीनेक

26

कृपया अपनी एडिट टेक्स्ट पृष्ठभूमि निर्धारित करें

android:background="#00000000"

यह काम करेगा।


3
यह काम की तरह होगा, लेकिन ठीक से नहीं। यदि आप पृष्ठभूमि को हटाते हैं, तो आप मैदान के चारों ओर हाशिये को भी खो देंगे - वे डिफ़ॉल्ट पृष्ठभूमि का हिस्सा हैं। सही समाधान एक अलग पृष्ठभूमि है कि बस में यह अंडरबार नहीं है स्थानापन्न करने के लिए है, जैसा कि @ ha1ogen सुझाव देता है
पेरी हार्टमैन

1
इस कार्यक्रम को पूर्ववत कैसे करें
तुषार नारंग

23

आप इसे प्रोग्रामेटिक रूप से उपयोग कर सकते हैं setBackgroundResource:

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

मुझे पता नहीं क्यों, लेकिन यह काम नहीं करता है। लाइन अभी भी वहाँ है
सैयद हिसान

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फ़ायर के लिए मूल्यों, लेकिन मैं स्पष्टता के लिए यहाँ आकार फ़ाइल को सरल बनाया है।


1
यह भी एक अच्छा विकल्प है। यह एक कस्टम ड्रॉबल सेट करने पर भिन्नता है।
पेरी हार्टमैन

15

संपत्ति का उपयोग करना:

android:background="@null"

या

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

मेरे लिए EditText की अंडरलाइन को छिपाने का काम किया।

हालाँकि, ध्यान दें कि यह तब TextInputLayout के साथ एक रिक्ति समस्या का कारण बनता है जो मैंने आसपास किया है EditText


1
रिक्ति मुद्दा त्रुटि लेआउट से आता है। तय करने के लिए कि TextEputLayout की त्रुटिपूर्ण संपत्ति सेट करें झूठी ऐप: errorEnabled = "झूठी"
उल्बो

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)

अपडेट करें:

यदि आप अपने आप को हमेशा अशक्त करते हुए पाते हैं, तो आप इसे विधि में कोडित कर सकते हैं (और फिर आप खुद को एडिट कर सकते हैं)

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

यह उत्तर एकदम सही है और इसे स्वीकार किया जाना चाहिए। यह डिफ़ॉल्ट पैडिंग को हटाए बिना पृष्ठभूमि को हटा सकता है।
पंकज कुमार

6

आपको एक मिनीवार्ड भी सेट करना होगा, अन्यथा पाठ खाली होने पर कर्सर गायब हो जाएगा।

        <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
मुझे पारदर्शी पृष्ठभूमि के साथ संयोजन पसंद है क्योंकि यह टाइप करते समय पाठ के नीचे दिखाई देने वाली पट्टी को छुपाता है - मैं चाहता हूं कि यह पाठ है, कोई श्रंगार नहीं।
19 क्रेग

1
यह उत्तर केवल वही है जो मेरे लिए काम करता है क्योंकि मेरे एडिटटेक्स्ट बॉक्स प्रोग्रामेटिक रूप से बनाए गए हैं और प्रत्येक में अलग-अलग पृष्ठभूमि के रंग हैं, इसलिए बैकग्राउंड अशक्त नहीं हो सकता है और माता-पिता की पृष्ठभूमि के रंग पर भरोसा कर सकते हैं
शेरोन लेव

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 छोटा हो जाता है। कम से कम, यह मेरा मामला था।

थोड़ा साइड नोट यह है कि यदि आप बैकग्राउंड को सेट करते हैं और मैंने ऊपर दिए गए जावा कोड को आज़माया है, तो इसे निष्पादित करने के बाद आपका ऐप ठीक से क्रैश हो जाएगा। (क्योंकि इसे पृष्ठभूमि मिलती है लेकिन यह अशक्त है।) यह स्पष्ट हो सकता है लेकिन मुझे लगता है कि इसे इंगित करना महत्वपूर्ण है।


4

मैंने सबसे उत्सुक चीज़ की खोज की! यदि आप इसे nullडेटा बाइंडिंग का उपयोग करने के लिए सेट करते हैं : android:background="@{null}"

फिर न केवल पृष्ठभूमि को हटा दिया जाता है, लेकिन दृश्य में अभी भी पैडिंग है जो कि डिफ़ॉल्ट पृष्ठभूमि से गणना की गई थी। तो किसी कारण से स्थगित null सेटिंग पिछले bg से गद्दी को साफ़ नहीं करती है ..? दृश्य पर पैडिंग लेफ्ट / टॉप / राइट 4 डीपी, बॉटम 13 डीपी (एमुलेटर लेवल 21 से) है।

सभी एपीआई स्तरों पर एक ही अंतिम परिणाम नहीं हो सकता है, इसलिए सावधान रहें! कोई मुझे बताए कि क्या आप इसका परीक्षण करते हैं और इसे विश्वसनीय मानते हैं। (यह भी ध्यान रखें कि नीचे की पैडिंग उस अंडरलाइन की वजह से चिपक जाती है जो मूल में थी। इसलिए आप शायद इसे XML में बदलना चाहते हैं, या कोड में रीसेट करने के बाद इसे बराबर टॉप पर लोड कर सकते हैं ...


4

यदि आपके संपादित पाठ में पहले से ही एक पृष्ठभूमि है तो आप निम्नलिखित का उपयोग कर सकते हैं।

android:textCursorDrawable="@null"

हालांकि यह मेरे लिए मदद के सवाल का हल नहीं करता है।
रूबेन विगुएरा

4

यदि आप चाहते हैं कि यह EditText के सभी उदाहरणों को प्रभावित करे और किसी भी वर्ग को जो इसे विरासत में मिला है, तो आपको अपने विषय में विशेषता, editTextBackground के लिए मूल्य निर्धारित करना चाहिए।

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

मैं उपयोग करने योग्य ड्रा का एक उदाहरण है:

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

यह डिफ़ॉल्ट सामग्री डिज़ाइन कार्यान्वयन क्या है, इसका थोड़ा संशोधित संस्करण है।

जब इसे लागू किया जाता है तो यह आपके सभी एडिटटेक्स्ट को पूरे ऐप में अंडरलाइन को हटा देगा, और आपको हर एक को मैन्युअल रूप से स्टाइल लागू नहीं करना होगा।



2

आप अपने editText के लिए एक स्टाइल को भी परिभाषित कर सकते हैं ताकि आप सभी गुणों को सामान्य रूप से पुनः प्राप्त कर सकें। यह बहुत शक्तिशाली है यदि आपको पाठ को कई बार संपादित करना है जिसमें व्यवहार की आवश्यकता है

कोड को रेस / वैल्यू / स्टाइल.एक्सएमएल में डालें

<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 = "textVoublePassword | textMultiLine" Android: background = "@ android: हीट मैजिक"

... इसका इष्टतम समाधान नहीं है, लेकिन यह काम करता है।


0

पृष्ठभूमि को शून्य पर सेट करें

android:background="@null" in your xml 

0

मेरे मामले में, editText.setBackgroundResource(R.color.transparent);सबसे अच्छा है।

यह केवल बार के तहत डिफ़ॉल्ट पैडिंग को नहीं हटाता है।

R.color.transparent = #00000000


0

यदि आप पृष्ठभूमि का उपयोग कर रहे हैं तो आपको इस टैग का उपयोग करना चाहिए

android:testCursorDrawable="@null" 

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" />
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.