如何在android中关闭材料设计EditText的默认功能?

Posted

技术标签:

【中文标题】如何在android中关闭材料设计EditText的默认功能?【英文标题】:How to turn off default features of material design EditText in android? 【发布时间】:2021-08-07 21:28:55 【问题描述】:

我在我的 android 应用程序中使用了材料设计“com.google.android.material:material:1.3.0”(只是为密码字段添加密码切换)。我不希望在我的 EditText 中包含其他材料功能。正如您在屏幕截图中看到的那样,当触摸 PasswordEditText 时,会出现蓝线并且提示文本会上升。我怎样才能摆脱它们并在材料设计功能之间只留下密码切换?

PasswordEditText 的 XML:

<com.google.android.material.textfield.TextInputLayout
    android:id="@+id/editTextTextPersonName2"
    android:layout_
    android:layout_marginTop="36dp"
    android:layout_marginRight="46dp"
    android:layout_marginLeft="46dp"
    android:paddingLeft="5dp"
    android:layout_
    android:ems="10"
    android:background="@drawable/edit_text_background"
    android:drawableStart="@drawable/ic_baseline_security_24"
    android:hint="Parol"
    app:passwordToggleEnabled="true"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.503"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/editTextTextPersonName">
    <com.google.android.material.textfield.TextInputEditText
        android:layout_
        android:layout_
        android:textSize="20sp"
        android:paddingBottom="10dp"
        android:paddingTop="10dp"
        android:inputType="textPassword"
        android:drawablePadding="5dp"/>
</com.google.android.material.textfield.TextInputLayout>

【问题讨论】:

【参考方案1】:

删除:

android:background="@drawable/edit_text_background"

更新:

android:drawableStart="@drawable/ic_baseline_security_24" app:passwordToggleEnabled="true"

到:

app:startIconDrawable="@drawable/ic_baseline_security_24" app:endIconMode="password_toggle"

并使用 TextInputLayout 的标准特性来实现相同的布局:

        <com.google.android.material.textfield.TextInputLayout
            android:id="@+id/editTextTextPersonName2"
            android:layout_
            android:layout_
            android:ems="10"
            style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
            app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.App.CornerCircle"
            app:boxStrokeColor="@color/...."
            app:startIconDrawable="@drawable/..."
            app:endIconMode="password_toggle"
            app:placeholderText="Parol"
            >
            <com.google.android.material.textfield.TextInputEditText
                android:layout_
                android:layout_
                android:textSize="20sp"
                android:inputType="textPassword"
                />
        </com.google.android.material.textfield.TextInputLayout>

与:

<style name="ShapeAppearanceOverlay.App.CornerCircle" parent="">
    <item name="cornerFamily">rounded</item>
    <item name="cornerSize">50%</item>
</style>

【讨论】:

【参考方案2】:

您需要进行两项更改:

    删除蓝色下划线并使用您自己的背景:

您需要将app:boxBackgroundMode="none" 设置为您的TextInputLayout

编辑: 如果仅此一项不起作用,请添加到您的 TextInputLayout:

app:boxStrokeWidth="0dp"
app:boxStrokeWidthFocused="0dp"
    禁用浮动提示:

您需要将app:hintEnabled="false" 用于您的TextInputLayout 并将提示设置为TextInputEditText

因此您的最终代码将如下所示:(请添加您的背景,因为我已删除以进行测试)

 <com.google.android.material.textfield.TextInputLayout
    android:id="@+id/editTextTextPersonName2"
    android:layout_
    android:layout_
    android:layout_marginLeft="46dp"
    android:layout_marginTop="36dp"
    android:layout_marginRight="46dp"
    android:ems="10"
    android:paddingLeft="5dp"
    app:hintEnabled="false"
    android:background="@drawable/border"
    app:boxBackgroundMode="none"
    app:boxStrokeWidth="0dp"
    app:boxStrokeWidthFocused="0dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.503"
    app:layout_constraintStart_toStartOf="parent"
    app:passwordToggleEnabled="true">

    <com.google.android.material.textfield.TextInputEditText
        android:layout_
        android:layout_
        android:drawablePadding="5dp"
        android:hint="Parol"
        android:inputType="textPassword"
        android:paddingTop="10dp"
        android:paddingBottom="10dp"
        android:textSize="20sp" />
</com.google.android.material.textfield.TextInputLayout>

【讨论】:

感谢您的回答。我已经按照你说的做了一切。浮动提示已被删除,但行没有。 'app:boxBackgroundMode="none"' 没有帮助。 @Jakhongir 尝试使用app:boxStrokeWidth 更新答案,看看是否有任何不同。

以上是关于如何在android中关闭材料设计EditText的默认功能?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 android 中删除 EditText 材料设计底线?

材料设计中的Android EditText视图浮动提示

如何在android中关闭AlertDialog

如何在android中关闭数据连接?

如何在 Android SearchView 中关闭键盘?

你如何在android studio中关闭版本控制?