Programing

EditText에서 언더 바를 숨기는 방법

lottogame 2020. 2. 18. 22:37
반응형

EditText에서 언더 바를 숨기는 방법


EditText 밑줄을 숨기려면 어떻게해야합니까 (끝에 작은 세리프가있는 프롬프트 행)?

내가 원하는 것을하는 더 좋은 방법이있을 수 있습니다 : EditText가있는 레이아웃이 있습니다. 일반적으로 사용자가 탭하고 텍스트를 입력하거나 편집 할 수있는 위치에 표시됩니다.

그러나 때로는 동일한 레이아웃을 사용하여 다른 데이터를 단순화하여 읽기 전용 방식으로 동일한 데이터를 표시하려고합니다. 프레젠테이션을 비슷하게 만들고 싶습니다. 높이와 글꼴이 동일해야하지만 밑줄은 없어야합니다.

스톱 갭 측정으로서, EditText를 제거하고 TextView를 대체하여 이것을 구현할 것입니다. 나는 그것이 원하는 결과를 줄 것이라고 생각하지만 속성을 변경하여 쉽게 할 수있는 일을하는 비싼 방법 인 것처럼 보입니다.


당신은을 설정할 수 있습니다 EditText사용자 정의 투명 당김 또는 사용을 가지고

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

또는

android:background="@null"

배경을 null로 설정하십시오.

android:background="@null"

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

android:backgroundTint="@color/Transparent"

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

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


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

android:background="#00000000"

작동합니다.


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

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

두 속성 중 하나를 사용하여

android:background="@null"

또는

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

EditText의 밑줄을 숨기려고 일했습니다.

그러나 텍스트를 둘러싼 TextInputLayout에 간격 문제가 발생합니다. EditText


내가 한 일은 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값을 사용 했지만 명확성을 위해 모양 파일을 단순화했습니다.


기본 패딩을 망치지 않고 숨기는 방법이 있습니다.

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)

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

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

android:textCursorDrawable="@null"

나는 매우 유용한 이것과 같은 것을 가지고있다 :

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이기 때문에 분명합니다. 그러나 그것을 지적하는 것이 중요하다고 생각합니다.


나는 가장 흥미로운 것을 발견했다! null데이터 바인딩 사용 하도록 설정 한 경우 :android:background="@{null}"

그런 다음 배경이 제거 될뿐만 아니라 뷰에는 여전히 기본 배경에서 계산 된 안쪽 여백이 있습니다. 그래서 어떤 이유로 지연된 null 설정이 이전 bg ..에서 패딩을 지우지 않습니까? 뷰의 패딩은 왼쪽 / 위쪽 / 오른쪽 4dp, 아래쪽 13dp입니다 (에뮬레이터 레벨 21에서).

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


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


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

 editText.setBackgroundColor(Color.TRANSPARENT);

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

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

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


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

또는

android:background="@null"

배경을 null로 설정

android:background="@null" in your xml 

제 경우 editText.setBackgroundResource(R.color.transparent);에는 최고입니다.

막대 바로 아래의 기본 패딩은 제거하지 않습니다.

R.color.transparent = #00000000


백그라운드를 사용하는 경우이 태그를 사용해야합니다

android:testCursorDrawable="@null" 

내 경우에는 텍스트를 편집하기 위해 사용자 정의 배경을 사용하고 있었으므로 배경을 @null로 설정하거나 색조를 투명으로 설정하면 해결책이 아니므로 아주 잘 작동하는 작은 트릭을 연주했습니다.

android:inputType="textVisiblePassword"

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

참고 URL : https://stackoverflow.com/questions/13975528/how-to-hide-underbar-in-edittext

반응형