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로 설정하면 여백이 없어집니다.
페리 하트만

124
이것을 사용하십시오 :android:background="@android:color/transparent"
dd619

3
이미 다른 색상의 배경을 가지고 있고 회색이라고 말하면이 경우 밑줄 / 밑줄을 제거하는 방법은 무엇입니까?
Narendra Singh

6
Android 19에서을 사용 android:background="@android:color/transparent"하면 동일한 여백 손실 문제가 발생합니다. 사용자 지정 드로어 블을 만드는 사람이 어디 있습니까?
Anti Earth

2
자바에서 프로그래밍 방식으로 어떻게 할 수 있습니까?
jagdish

100

background를 null로 설정하십시오.

android:background="@null"

2
background = "# 00000000"과 같습니다. 실제로 작동하지 않습니다.
페리 하트만

14
이것은 나를 위해 일한하지만 난 일을 결국 android:background="@android:color/transparent때문에 @null무섭다.
Dick Lucas

3
@Richard 왜 @null무서운가?
Michael

@null은 배경이 없음을 나타냅니다. background = "# 00000000"을 지정하면 알파 값이 "0"인 흰색 배경이 그려집니다.
Vinayak V Naik

2
"@null"은 깜박이는 커서도 숨기고 "@android : color / transparent"는 아닙니다.
루카스 노박

37

EditTextbackgroundTint값을 특정 색상으로 설정할 수 있습니다 . 투명 색상을 설정하면 언더 바가 사라집니다.

android:backgroundTint="@color/Transparent"

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

하지만 당신은이를 사용할 수 있습니다 Api v21(Lollipop)이상


이것은 더 나은 방법 (다른 답변이 제안으로) 전체보기의 배경을 변경하는 것보다
알렉스 Semeniuk

26

편집 텍스트 배경을 다음과 같이 설정하십시오

android:background="#00000000"

작동합니다.


3
그것은 작동하지만 제대로 작동하지 않습니다. 단순히 배경을 제거하면 필드 주변의 여백도 손실됩니다. 기본 배경의 일부입니다. 올바른 해결책은 @ ha1ogen이 제안한 것처럼 단순히 밑줄이없는 다른 배경을 대체하는 것입니다.
Peri Hartman

1
프로그래밍 방식으로 실행 취소하는 방법
Tushar Narang

23

다음을 사용하여 프로그래밍 방식으로 수행 할 수 있습니다 setBackgroundResource.

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

왜 그런지 모르겠지만 작동하지 않습니다. 라인은 여전히 존재
에드 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>

참고 : 실제로 firelds @dimen@color값을 사용 했지만 명확성을 위해 모양 파일을 단순화했습니다.


1
이것도 완벽하게 좋은 옵션입니다. 커스텀 드로어 블 설정의 변형입니다.
페리 하트만

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
입력하는 동안 텍스트 아래에 표시되는 막대가 숨겨지기 때문에 투명한 배경과 함께 이것을 좋아합니다. 원하는 것은 텍스트입니다. 장식은 없습니다.
19Craig

1
이 답변은 편집 텍스트 상자가 프로그래밍 방식으로 만들어지고 각각 다른 배경색을 가지므로 배경이 null 일 수 없으며 부모 배경색에 의존 할 수 있기 때문에 저에게
효과적이었습니다.

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 ..에서 패딩을 지우지 않습니까? 뷰의 패딩은 왼쪽 / 위쪽 / 오른쪽 4dp, 아래쪽 13dp입니다 (에뮬레이터 레벨 21에서).

모든 API 레벨에서 동일한 최종 결과를 얻지 못할 수 있으므로주의하십시오! 누군가 당신이 이것을 테스트하고 신뢰할 수 있는지 찾으십시오. (또한 원본의 밑줄 때문에 아래쪽 패딩이 튀어 나옵니다. 따라서 XML에서 변경하거나 코드를 맨 위로로드 한 후 코드에서 재설정해야 할 것입니다 ...


4

편집 텍스트에 이미 배경이 있으면 다음을 사용할 수 있습니다.

android:textCursorDrawable="@null"

이것은 문제를 해결하지 못했지만 그것은 나에게 도움이되었습니다.
Rubén Viguera

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가 앱 전체에서 밑줄을 제거하므로 스타일을 각각 수동으로 적용 할 필요는 없습니다.


4

이것을 간단히 사용하십시오

 editText.setBackgroundColor(Color.TRANSPARENT);

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

프로그래밍 방식으로 사용 : editText.setBackground(null)

에서 xml사용 :android:background="@null"



1

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

... 최상의 솔루션은 아니지만 작동합니다.


0

배경을 null로 설정

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" />
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.