EditText'te alt çubuğu gizleme


496

EditText alt çubuğunu nasıl gizleyebilirim (uçlarında küçük serifs içeren bilgi istemi satırı)?

İstediğimi yapmanın daha iyi bir yolu olabilir: Bir EditText ile bir düzen var. Normalde bu, kullanıcının üzerine dokunabileceği ve metin girmeye veya düzenlemeye başlayabileceği yerlerde iyi görüntüler.

Ancak bazen, aynı verileri salt okunur bir şekilde görüntülemek için aynı düzeni kullanmak istiyorum (diğer mantığı basitleştirir). Sunumun benzer olmasını istiyorum - aynı yüksekliğe ve aynı yazı tipine sahip olmalı, ancak alt çubuğa sahip olmamalıdır.

Bir dur-boşluk ölçüsü olarak, ben EditText kaldırmak ve bir TextView yerine bunu uygulamak olacak. Bunun istenen sonuçları vereceğini düşünüyorum, ancak nitelikleri değiştirerek yapılması kolay bir şey yapmak için dolambaçlı bir yol gibi görünüyor.


Yanıtlar:


1052

EditTextÖzel bir şeffaf çekilebilir veya sadece kullanmak için ayarlayabilirsiniz

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

veya

android:background="@null"

veya Programlı olarak

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

7
Ha1ogen'in söylediği gibi en iyi cevap, özel bir çekilebilir yapmaktır. Normal EditText alanları için kullanılan 9 yamayla başlayın. Alt çubuğu ve istemediğiniz diğer grafikleri çıkarmak için değiştirin. Bununla, değiştirilmiş EditText'iniz normal EditText alanlarıyla aynı kenar boşluklarına ve genel görünüme sahip olacaktır. Arka planı null değerine ayarlarsanız kenar boşlukları kaybolur.
Peri Hartman

124
Bunu kullanın:android:background="@android:color/transparent"
dd619

3
zaten başka bir renkten arka planım varsa, gri diyelim, bu durumda alt çubuğu / alt çizgiyi nasıl kaldırabilirim?
Narendra Singh

6
Android 19'da, kullanmak android:background="@android:color/transparent"aynı marj kaybına neden oluyor ... Birisinin böyle bir özel çekilebilir ürün oluşturmasının herhangi bir yerinde örneği var mı?
Anti Earth

2
Java'da programlı olarak nasıl yapabiliriz?
jagdish

100

Arka planı null olarak ayarla.

android:background="@null"

2
Background = "# 00000000" ile aynı. Gerçekten çalışmıyor.
Peri Hartman

14
Bu benim için çalıştı ama sonunda korkunç android:background="@android:color/transparentçünkü yaptım @null.
Dick Lucas

3
@Richard neden @nullkorkutucu?
Michael

@null, arka plan olmadığını gösterir. Background = "# 00000000" belirtirsek, alfa değeri "0" olan beyaz arka plan çizer.
Vinayak V Naik

2
"@null" yanıp sönen imleci de gizler, "@android: renkli / şeffaf" değil.
Lukas Novak

37

Ayarlayabilirsiniz EditText'ın backgroundTintbelirli bir renge değer. Saydam renk ayarlarsanız, alt çubuk gitmelidir.

android:backgroundTint="@color/Transparent"

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

Ancak bunu Api v21(Lollipop)daha yüksek bir değerde kullanabilirsiniz


Bu, tüm görünümün arka planını değiştirmekten çok daha iyidir (diğer cevapların önerdiği gibi)
Alex Semeniuk

26

Lütfen düzenleme metni arka planınızı

android:background="#00000000"

Çalışacak.


3
İşi sıralayacak, ama düzgün değil. Arka planı kaldırırsanız, alanın kenar boşluklarını da kaybedersiniz - bunlar varsayılan arka planın bir parçasıdır. Doğru çözüm, @ ha1ogen'in önerdiği gibi, içinde alt çubuğa sahip olmayan farklı bir arka planın yerini almaktır
Peri Hartman

1
Bu programlı olarak nasıl geri alınır
Tushar Narang

23

Programlı olarak aşağıdakileri kullanarak yapabilirsiniz setBackgroundResource:

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

neden bilmiyorum ama işe yaramıyor. hat hala orada
Syed Hissaan

15

Yaptığım bir şekil çizilebilir oluşturmak ve bunu arka plan olarak ayarlamak oldu:

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

Not: Aslında kullanılan @dimenve @colordeğerler firelds için, ama netlik için buraya şekil dosyası basitleştirdik.


1
Bu da mükemmel bir seçenektir. Özel bir çekmecenin ayarlanmasında bir varyasyon.
Peri Hartman

15

Bu özelliklerden birini kullanarak:

android:background="@null"

VEYA

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

EditText'in alt çizgisini gizlemek için çalıştı.

Ancak, daha sonra çevrelediğim TextInputLayout ile bir boşluk sorununa neden olduğunu unutmayın EditText


1
Aralık sorunu hata düzeninden gelir. ErrorEnabled = "false": false app TextInputLayout arasında errorEnabled özelliğini ayarlayın düzeltme amacıyla
Ulbo

12

Varsayılan dolguyu bozmadan gizlemenin bir yolu:

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

kullanımı:

editText.setViewBackgroundWithoutResettingPadding(null)

Güncelleme:

Kendinizi her zaman null değerini geçtiğinizde bulursanız, bunu yöntemde kodlayabilirsiniz (ve sonra EditText'in kendisini aşırı yükleyebilirsiniz)

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

Bu cevap mükemmel ve kabul edilmelidir. Varsayılan dolguyu kaldırmadan arka planı kaldırabilir.
Pankaj Kumar

6

Bir minWidth de ayarlamanız gerekir, aksi takdirde metin boşsa imleç kaybolur.

        <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

Benim durumumda düzenleme metni için özel arka plan kullanıyordum, bu yüzden @null'a arka plan ayarlamak veya saydamlığa renk tonu ayarlamak benim için bir çözüm değildi, bu yüzden benim için çok iyi çalışan küçük bir numara oynadım

android:inputType="textVisiblePassword"

ve işi oldukça iyi yapıyor .. bu en uygun çözüm değil ama çalışıyor


1
Saydam arka plan ile birlikte bunu seviyorum çünkü yazarken metnin altında görünen çubuğu gizler - tek istediğim metin, süsleme yok.
19Craig

1
Bu cevap benim için işe yarayan tek şey çünkü edittext kutularım programlı olarak oluşturuldu ve her birinin farklı arka plan renkleri var, böylece arka plan boş olamaz ve ebeveynlerin arka plan rengine güvenemez
Sharone Lev

5

Çok kullanışlı bir şey var:

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

generalEditText benim EditText ve beyaz renk:

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

Bu, dolguyu kaldırmaz ve EditText'iniz olduğu gibi kalır. Yalnızca alttaki çizgi kaldırılacaktır. Bazen böyle yapmak daha faydalıdır.

android:background="@null"Önerilen sayıda kullanırsanız doldurmayı kaybedersiniz ve EditText küçülür. En azından benim durumumdu.

Küçük bir yan not, arka planı null olarak ayarlayıp yukarıda verdiğim java kodunu denerseniz, uygulamanız çalıştırıldıktan hemen sonra kilitlenecektir. (çünkü arka planı alır ama boştur.) Açık olabilir ama işaret etmenin önemli olduğunu düşünüyorum.


4

En ilginç şeyi keşfettim! Eğer bununullVeri Bağlama kullanarak : android:background="@{null}"

Sonra sadece arka plan kaldırılmaz, aynı zamanda görünümde varsayılan arka plandan hesaplanan dolgu bulunur. Yani bir nedenle ertelenmiş null ayarı dolgu önceki bg temizlemez ..? Görünümdeki dolgu sol / üst / sağ 4dp, alt 13dp'dir (emülatör seviyesinden 21).

Tüm API seviyelerinde aynı sonuç olmayabilir, bu yüzden dikkatli olun! Birisi bana bunu test edip güvenilir bulup bulmayacağını söyle. (Ayrıca, alt dolgunun orijinalindeki alt çizgiden dolayı ortaya çıktığını unutmayın. Bu nedenle, muhtemelen XML'de değiştirmek veya eşit üste yüklendikten sonra kodda sıfırlamak isteyeceksiniz ...


4

düzenleme metninizde zaten bir arka plan varsa aşağıdakileri kullanabilirsiniz.

android:textCursorDrawable="@null"

Bu sorunu çözmese de bana yardımcı oldu.
Rubén Viguera

4

Bunun tüm EditText örneklerini ve ondan devralan herhangi bir sınıfı etkilemesini istiyorsanız, temanızda editTextBackground niteliğinin değerini ayarlamanız gerekir.

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

Kullandığım çekmeceye bir örnek:

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

Bu, varsayılan malzeme tasarımı uygulamasının biraz değiştirilmiş sürümüdür.

Uygulandığında, tüm EditText'inizin alt çizgiyi uygulama boyunca kaldırmasını sağlar ve stili her birine elle uygulamak zorunda kalmazsınız.



2

Ayrıca, tüm özellikleri ortak olarak yeniden gruplayabilmeniz için editText öğeniz için bir STİL tanımlayabilirsiniz. Davranışı olması gereken birden çok metni düzenlemek zorundaysanız çok güçlüdür

Kodu res / valu / styles.xml dosyasına koyun

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

Bundan sonra sadece editText'inizde çağırmanız gerekir

<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

Programlı olarak kullanın: editText.setBackground(null)

Gönderen xmlkullanımı:android:background="@null"



1

android: inputType = "textVisiblePassword | textMultiLine" android: background = "@ android: renk / şeffaf"

... bu en uygun çözüm değil ama işe yarıyor.


0

Arka planı null olarak ayarla

android:background="@null" in your xml 

0

Benim durumumda, editText.setBackgroundResource(R.color.transparent); en iyisi.

Çubuğun hemen altındaki varsayılan dolguları kaldırmaz.

R.color.transparent = #00000000


0

arka plan kullanıyorsanız bu etiketi kullanmanız gerekir

android:testCursorDrawable="@null" 

0

Hem kenar boşluklarını hem de arka plan rengini korumak için:

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>

Metni düzenle:

<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" />
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.