EditTextでアンダーバーを非表示にする方法


496

EditTextアンダーバー(最後に小さなセリフが付いたプロンプトライン)を非表示にするにはどうすればよいですか?

私がやりたいことを行うためのより良い方法があるかもしれません:EditTextのレイアウトがあります。通常、これはユーザーがタップしてテキストの入力または編集を開始できる場所に表示されます。

ただし、同じレイアウトを使用して(他のロジックを簡略化)、同じデータを読み取り専用で表示したい場合があります。プレゼンテーションを同様にしたい-それは同じ高さと同じフォントを持っている必要がありますが、アンダーバーはありません。

応急措置として、EditTextを削除してTextViewを置き換えることにより、これを実装します。私はそれで望ましい結果が得られると思いますが、属性を変更することで簡単に実行できるはずのことを行うには、高価な方法のように見えます。


回答:


1052

EditTextカスタムの透明なドローアブルを設定するか、または

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

または

android:background="@null"

またはプログラム的に

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

7
最良の答えは、ha1ogenが言うように、カスタムドローアブルを作成することです。通常のEditTextフィールドに使用される9パッチから始めます。それを変更して、不要なアンダーバーやその他のグラフィックを取り除きます。これにより、変更したEditTextは、通常のEditTextフィールドと同じマージンと全体的な外観になります。背景を単にnullに設定すると、マージンが失われます。
Peri Hartman

124
これを使用してください:android:background="@android:color/transparent"
dd619

3
私がすでに他の色の背景を持っている場合はどうなりますか、灰色にしましょう、その場合下線/下線を削除するにはどうすればよいですか?
Narendra Singh

6
Android 19では、を使用android:background="@android:color/transparent"すると同じマージンの損失の問題が発生します...そのようなカスタムドローアブルを作成している誰かの例はありますか?
反地球

2
プログラムでJavaを使用するにはどうすればよいですか?
ジャディッシュ

100

背景をnullに設定します。

android:background="@null"

2
これはbackground = "#00000000"と同じです。本当に機能しません。
Peri Hartman

14
これは私にとってはうまくいきましandroid:background="@android:color/transparent@nullが、恐いので私は結局やってしまいました。
ディックルーカス

3
@リチャードはなぜ@null怖いの?
マイケル

@nullは、背景が存在しないことを示します。background = "#00000000"を指定すると、アルファ値「0」の白い背景が描画されます。
Vinayak V Naik

2
「@null」は点滅するカーソルも非表示にし、「@ android:color / transparent」は非表示にしません。
Lukas Novak 2017年

37

EditTextbackgroundTint値を特定の色に設定できます。透明色を設定すると、アンダーバーが消えるはずです。

android:backgroundTint="@color/Transparent"

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

しかし、これはApi v21(Lollipop)以上で使用できます


これは、ビュー全体の背景を変更するよりもはるかに優れています(他の回答が示唆するように)
Alex Semeniuk '28

26

edittextの背景を次のように設定してください

android:background="#00000000"

それが動作します。


3
それは一種の仕事になりますが、適切に動作しません。背景を単に削除すると、フィールドの周囲のマージンも失われます-それらはデフォルトの背景の一部です。適切な解決策は、@ ha1ogenが示唆するように、アンダーバーがない単純な別の背景に置き換えることです
Peri Hartman

1
プログラムでこれを元に戻す方法
Tushar Narang

23

あなたはプログラムを使用してそれを行うことができますsetBackgroundResource

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

理由はわかりませんが、うまくいきません。ラインはまだそこにあります
Syed Hissaan

15

私がしたことは、Shapeドローアブルを作成し、それを背景として設定することでした。

<?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
これも完全に良いオプションです。カスタムドローアブルの設定のバリエーションです。
Peri Hartman、

15

いずれかのプロパティを使用:

android:background="@null"

または

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

EditTextの下線を隠すために私のために働いた。

ただし、それにより、TextInputLayoutでスペースの問題が発生することに注意してください。 EditText


1
間隔の問題は、エラーレイアウトが原因です。これを修正するには、TextInputLayoutのerrorEnabledプロパティをfalseに設定しますapp: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
入力中にテキストの下に表示されるバーを非表示にするので、透明な背景と組み合わせてこれを気に入っています。必要なのはテキストだけで、装飾はありません。
クレイグ

1
この答えは、私のEditTextボックスがプログラム的に作成され、背景はnullにし、親の背景色に頼ることはできませんので、それぞれ異なる背景色を持っているので、私のために働いた唯一のものである
Sharoneレフ

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が小さくなります。少なくとも、それは私の場合でした。

ちょっとした注意点として、background nullを設定して、上記で提供したJavaコードを試すと、実行直後にアプリがクラッシュします。(背景を取得するがnullであるため)自明かもしれませんが、指摘することが重要だと思います。


4

私は最も興味深いものを発見しました!nullデータバインディングを使用するように設定した場合: android:background="@{null}"

その後、背景が削除されるだけでなく、ビューにはデフォルトの背景から計算されたパディングが残っています。したがって、何らかの理由で遅延null設定では、前のbgからのパディングはクリアされません。ビューのパディングは、左/上/右4 dp、下13 dp(エミュレータレベル21から)です。

すべてのAPIレベルで同じ結果になるとは限らないため、注意してください!これをテストして信頼できると誰かが言った。(また、元のアンダーラインが原因で下のパディングが突き出ていることに注意してください。そのため、XMLで変更するか、同じトップにロードされた後にコードでリセットする必要があります...



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>

これは、デフォルトのマテリアルデザインの実装を少し変更したバージョンです。

適用すると、すべてのEditTextがアプリ全体で下線を削除します。スタイルを1つ1つすべてに手動で適用する必要はありません。



2

editTextのSTYLEを定義して、すべてのプロパティを共通に再グループ化することもできます。動作を必要とする複数の編集テキストが必要な場合、それは非常に強力です

コードを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

背景を使用している場合は、このタグを使用する必要があります

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" />
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.