programing

텍스트 편집에서 막대 아래를 숨기는 방법

newsource 2023. 6. 14. 21:53

텍스트 편집에서 막대 아래를 숨기는 방법

텍스트 편집 아래쪽 막대(끝에 작은 세리프가 있는 프롬프트 줄)를 숨기려면 어떻게 해야 합니까?

제가 원하는 것을 할 수 있는 더 나은 방법이 있을지도 모릅니다.편집 텍스트가 있는 레이아웃이 있습니다.일반적으로 사용자가 탭을 눌러 텍스트 입력 또는 편집을 시작할 수 있는 위치에 표시됩니다.

그러나 때로는 동일한 레이아웃(다른 논리를 단순화)을 사용하여 동일한 데이터를 읽기 전용으로 표시하고 싶습니다.프레젠테이션의 높이와 글꼴은 같아야 하지만 언더바는 없어야 합니다.

임시방편으로 텍스트 편집을 제거하고 텍스트 보기를 대체하여 이 기능을 구현하려고 합니다.저는 그것이 원하는 결과를 줄 것이라고 생각하지만, 속성을 변경함으로써 해야 할 일을 하는 것은 대략 돈이 많이 드는 방법처럼 보입니다.

▁the를 설정할 수 .EditText

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

또는

android:background="@null"

또는 프로그래밍 방식으로

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

배경을 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);

텍스트 입력 레이아웃 내부에서 텍스트 편집을 사용하는 경우app:boxBackgroundMode="none"다음과 같이:

<com.google.android.material.textfield.TextInputLayout
    app:boxBackgroundMode="none"
    ...
    >

    <EditText
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</com.google.android.material.textfield.TextInputLayout>

제가 한 일은 Shape drawable을 만들고 배경으로 설정하는 것이었습니다.

<?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방화벽에 대한 값이지만 명확하게 하기 위해 모양 파일을 단순화했습니다.

다음 중 하나의 속성 사용:

android:background="@null"

OR

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

편집 텍스트의 밑줄을 숨기는 데 도움이 되었습니다.

입력 한다는 점에 하시기 바랍니다.EditText

기본 패딩을 손상시키지 않고 숨길 수 있는 방법은 다음과 같습니다.

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

나의 경우 텍스트 편집을 위해 사용자 지정 배경을 사용하고 있었기 때문에 배경을 @null로 설정하거나 틴트를 투명으로 설정하는 것은 나에게 해결책이 되지 않았기 때문에 나는 나에게 아주 잘 맞는 작은 속임수를 썼습니다.

android:inputType="textVisiblePassword"

그리고 그것은 일을 꽤 잘 마무리합니다.최적의 솔루션은 아니지만 작동합니다.

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

XML 편집 텍스트에서 이 코드 사용

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

아래 코드에 나타난 바와 같이.

         <EditText
                    android:id="@+id/EditText"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="@android:color/transparent"/>

저는 매우 유용한 다음과 같은 것을 가지고 있습니다.

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

여기서 일반 편집텍스트는 내 텍스트 편집이고 색상은 흰색입니다.

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

이렇게 해도 패딩이 제거되지 않으며 편집 텍스트는 그대로 유지됩니다.하단의 라인만 제거됩니다.때때로 이렇게 하는 것이 더 유용합니다.

사용하는 경우android:background="@null"많은 사람들이 제안했듯이 패딩을 잃어버리면 EditText는 작아집니다.적어도, 그건 제 경우였어요.

작은 참고 사항은 만약 당신이 background null을 설정하고 내가 위에서 제공한 자바 코드를 시도한다면, 당신의 앱은 실행 후 바로 충돌할 것입니다. (background null이지만 null이기 때문입니다.뻔할 수도 있지만 지적하는 것이 중요하다고 생각합니다.

간단히 사용

 editText.setBackgroundColor(Color.TRANSPARENT);

저는 가장 흥미로운 것을 발견했습니다!으로 하면,null바인딩 : 데터바딩용사:android:background="@{null}"

그러면 배경이 제거될 뿐만 아니라 보기에는 기본 배경에서 계산된 패딩이 남아 있습니다.그래서 어떤 이유에서인지 지연된 null 설정은 이전 bg에서 패딩을 지우지 못합니다...?보기의 패딩은 왼쪽/위쪽/오른쪽 4dp, 아래쪽 13dp(에뮬레이터 레벨 21부터)입니다.

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

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

android:textCursorDrawable="@null"

EditText의 모든 인스턴스와 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>

이것은 기본 재료 설계 구현의 약간 수정된 버전입니다.

이 기능을 적용하면 모든 편집 텍스트가 앱 전체에서 밑줄을 제거하고 스타일을 수동으로 모두 적용할 필요가 없습니다.

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

또는

android:background="@null"

또한 모든 속성을 공통으로 다시 그룹화할 수 있도록 편집 텍스트에 대한 스타일을 정의할 수 있습니다.동작이 필요한 텍스트를 여러 번 편집해야 하는 경우 매우 강력합니다.

코드를 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
    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" />

편집 텍스트 Android Studio에서 밑줄을 제거하는 몇 가지 방법

android:background="@null" 위 라인은 어느 시점에서 문제를 일으킵니다.
또는

사용하다 android:background="@android:color/transparent"

또는 프로그래밍 방식으로**

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

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

부터xml사용:android:background="@null"

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

...최적의 솔루션은 아니지만 효과적입니다.

좋아요. Android에서 텍스트 편집을 위해 아웃라인 상자 및 텍스트 편집의 Null 배경과 같은 몇 가지 더 쉬운 작업을 만들 수 있습니다.는 아래와 같습니다.

복사하여 붙여넣기만 하면 됩니다.

마지막에 도구 옵션이 있는 암호에 대해 아웃라인 상자를 사용하여 텍스트를 편집합니다.

    <com.google.android.material.textfield.TextInputLayout    
          style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:hint="@string/password"
          app:boxCornerRadiusBottomEnd="10dp"
          app:boxCornerRadiusBottomStart="10dp"
          app:boxCornerRadiusTopEnd="10dp"
          app:boxCornerRadiusTopStart="10dp"
          app:boxStrokeColor="@color/primary_color"
          app:boxStrokeWidth="1dp"
          app:boxStrokeWidthFocused="1dp"
          app:errorIconDrawable="@null"
          app:hintTextColor="#d3d3d3"
          app:passwordToggleDrawable="@drawable/password_toggle"
          app:passwordToggleEnabled="true">
    
          <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/etPassword"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="textPassword"
                android:paddingStart="10dp"
                android:paddingEnd="0dp"
                android:textCursorDrawable="@null"
                android:textSize="12sp" />
</com.google.android.material.textfield.TextInputLayout>

다음에 대한 드로블password_toggle

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/ic_show" android:state_checked="true"/>
    <item android:drawable="@drawable/ic_hide"/>
</selector>

이제 테두리 없이 텍스트를 편집합니다.

전자 메일 편집 텍스트

<com.google.android.material.textfield.TextInputEditText
       android:id="@+id/email"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:background="@drawable/bg_edittext"
       android:hint="@string/enter_your_email"
       android:imeOptions="actionDone"
       android:inputType="textEmailAddress"
       android:maxLines="1"
       android:padding="10dp"
       android:singleLine="true"
       android:textColor="@color/black"
       android:textColorHint="#d3d3d3"
       android:textSize="12sp" />

암호 편집 텍스트의 경우.

<com.google.android.material.textfield.TextInputEditText
       android:id="@+id/password"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:background="@drawable/bg_edittext"
       android:hint="@string/enter_your_password"
       android:imeOptions="actionDone"
       android:inputType="textEmailAddress"
       android:maxLines="1"
       android:padding="10dp"
       android:singleLine="true"
       android:textColor="@color/black"
       android:textColorHint="#d3d3d3"
       android:textSize="12sp" />

배경을 null로 설정합니다.

android:background="@null" in your xml 

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

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

R.color.transparent = #00000000

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

android:testCursorDrawable="@null" 

여백과 배경색을 모두 유지하려면 다음을 사용합니다.

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

다음과 같은 사용자 정의 편집 텍스트를 만들 수도 있습니다.

class CustomEditText : androidx.appcompat.widget.AppCompatEditText {
    constructor(context: Context?) : super(context)
    constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs)
    constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)

    private val paint = Paint()
    private val path = Path()

    init { // hide your underbar
        this.setBackgroundResource(android.R.color.transparent)

        // other init stuff...
    }

    override fun onDraw(canvas: Canvas?) {
        super.onDraw(canvas)

        // draw your canvas...
    }
}

고정 힌트는 다음을 사용합니다.

        <item name="boxStrokeWidth">0dp</item>
        <item name="boxCornerRadiusTopStart">12dp</item>
        <item name="boxCornerRadiusTopEnd">12dp</item>
        <item name="boxCornerRadiusBottomStart">12dp</item>
        <item name="boxCornerRadiusBottomEnd">12dp</item>

저는 이 문제를 다음과 같이 해결했습니다.

 <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/tv_input_password"
        android:layout_width="250dp"
        android:layout_height="50dp"
        app:errorEnabled="true"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.503"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/tv_signin"
        app:layout_constraintVertical_bias="0.322"
        app:boxStrokeWidth="0dp"
        app:boxStrokeWidthFocused="0dp"
        app:passwordToggleEnabled="true">

        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/et_password"
            android:layout_width="250dp"
            android:layout_height="50dp"
            android:background="@drawable/shape1"
            />

    </com.google.android.material.textfield.TextInputLayout>

사실은app:boxStrokeWidth="0dp"그리고.app:boxStrokeWidthFocused="0dp"밑줄을 제거할 수 있습니다.

직사각형 모양:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle"
    >

    <solid android:color="@color/white"/>
    <corners android:radius="50dp"/>
    <stroke android:width="0.75dp" android:color="#B1B0B3"/>



</shape>

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