提示在 TextInputLayout 中的位置太高

Hint's Position in TextInputLayout too high

我正在尝试在我的登录表单中使用 TextInputLayout 使我的 EditText 看起来像这样:

但是,我的 EditText 变成了这个:

下划线看起来太低了,提示看起来太高了 这很奇怪,因为我其他项目中的 TextInputLayout 看起来不错

我已经在尝试在 EditText 中添加填充,但它只是使输入与提示重叠。 这是损坏的 TextInputLayout 的 xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Login">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/background_login"
        android:scaleType="centerCrop"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/login_form"
        android:layout_marginTop="125dp"
        android:layout_marginBottom="100dp"
        android:layout_marginEnd="50dp"
        android:layout_marginStart="50dp"
        android:elevation="1dp"
        android:paddingStart="50dp"
        android:paddingEnd="50dp"
        android:orientation="vertical"
        android:gravity="center_vertical">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textAlignment="center"
            android:textStyle="bold"
            android:textColor="#641C28"
            android:text="@string/login"
            android:textSize="20sp"
            android:layout_marginBottom="15dp"/>

        <com.google.android.material.textfield.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <EditText
                android:id="@+id/edt_userlogin"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="#FCC858"
                android:hint="@string/username"
                android:layout_marginBottom="15dp"
                android:drawableStart="@drawable/username" />
        </com.google.android.material.textfield.TextInputLayout>

        <com.google.android.material.textfield.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:passwordToggleEnabled="true">

            <EditText
                android:id="@+id/edt_passlogin"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="#FCC858"
                android:hint="@string/password"
                android:drawableStart="@drawable/password"
                android:layout_marginBottom="40dp"
                android:inputType="textPassword"/>
        </com.google.android.material.textfield.TextInputLayout>

        <Button
            android:id="@+id/btn_login"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/custom_btnlogin"
            android:theme="@style/btnLoginStyle"
            android:text="Sign In"/>
    </LinearLayout>

    <ImageButton
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="@drawable/background_logo"
        android:elevation="1dp"
        android:scaleType="fitCenter"
        android:src="@drawable/logo_borderless"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="75dp"/>

</RelativeLayout>

编辑:

所以,我尝试复制我之前 xml 的代码,以防万一我遗漏了什么,但问题仍然存在

我已经试过新建一个项目,也用了TextInputLayout,但是问题还是没有解决

我认为问题不在 xml。这是我的模块 gradle,我没有发现任何问题,但也许你们发现了:

plugins {
    id 'com.android.application'
}

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.2"

    defaultConfig {
        applicationId "com.itats.huwenakapp"
        minSdkVersion 22
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {

    implementation 'androidx.appcompat:appcompat:1.3.1'
    implementation 'com.google.android.material:material:1.4.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.0'
    implementation 'androidx.navigation:navigation-fragment:2.3.5'
    implementation 'androidx.navigation:navigation-ui:2.3.5'
    implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1'
    implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}

从您的 EditText 中删除 android:layout_marginBottom="15dp"

如果您想要 marginBottom,请将其添加到 TextInputLayout。

我找到了一个可行的解决方案:我没有在 EditText 中使用 DrawableStart,而是使用以下代码将可绘制对象放在 TextInputLayout 中:

app:startIconDrawable="@drawable/your_drawable"

结果是这个视图:

如您所见,尽管下划线看起来仍然太低,但可绘制对象和提示看起来是一致的。这不是一个完美的解决方案,但至少看起来更好。