Android中TextInputLayout提示位置异常,如何调整至圆角框内?
问题:TextInputEditText的Hint无法移入自定义圆角区域
我尝试调整TextInputLayout/TextInputEditText中的hint位置,使其移入自定义的圆角形状区域内,但无法成功。
现有布局代码
<?xml version="1.0" encoding="utf-8"?> <!-- module : app folder : layout --> <androidx.drawerlayout.widget.DrawerLayout android:id="@+id/drawer_layout_activity_setting" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context="it.numera.pagopaliteapp.activity.SettingActivity" android:background="@color/colorLayoutPagoBperBackgroundGenerale" > <!-- inizio sezione principale --> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/colorLayoutPagoBperBackgroundGenerale" > <androidx.appcompat.widget.Toolbar android:id="@+id/toolbar_activity_setting" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="@drawable/rettangolo_smussato" android:elevation="4dp" android:theme="@style/ThemeOverlay.AppCompat.ActionBar" app:titleTextColor="@color/colorLayoutPagoBperBackgroundGenerale" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" android:layout_marginTop="6dp" android:layout_marginRight="6dp" android:gravity="right" app:srcCompat="@drawable/logo_pagppa_55x35" /> </androidx.appcompat.widget.Toolbar> <LinearLayout android:id="@+id/activity_setting_layout_email_default" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/toolbar_activity_setting" android:layout_alignParentStart="true" android:layout_marginRight="2dp" android:layout_marginTop="@dimen/layoutpagobper_margin_from_toolbar" android:orientation="vertical"> <TextView android:id="@+id/activity_setting_label_email_default" android:layout_width="@dimen/layoutpagobper_edittext_width" android:layout_height="wrap_content" android:layout_marginLeft="25dp" android:layout_marginTop="35dp" android:fontFamily="@font/sf_ui_display_bold" android:text="@string/activity_setting_label_email_notifica_default" android:textColor="#005157" android:textSize="@dimen/layoutpagobper_font_size_testi_label_default" android:textStyle="bold" /> <com.google.android.material.textfield.TextInputLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="25dp" android:layout_marginTop="10dp" > <com.google.android.material.textfield.TextInputEditText android:id="@+id/activity_setting_edittext_email_default" android:layout_width="@dimen/layoutpagobper_edittext_width" android:layout_height="53dp" android:paddingLeft="12dp" android:paddingTop="3dp" android:fontFamily="@font/sf_ui_display_regular" android:textColor="#005157" android:textColorHint="#58979A" android:background="@drawable/layoutpagobper_rettangolo_edittext_no_icon" android:hint="@string/edittext_email_hint15" /> </com.google.android.material.textfield.TextInputLayout> <TextView android:id="@+id/activity_setting_label_info_email_default" android:layout_width="@dimen/layoutpagobper_edittext_width" android:layout_height="wrap_content" android:layout_marginLeft="25dp" android:layout_marginTop="14dp" android:fontFamily="@font/sf_ui_display_regular" android:text="Puoi modificare la tua email o cliccare il Conferma ed andare avanti" android:textColor="#005157" android:textSize="14dp" android:textStyle="normal" /> </LinearLayout> <LinearLayout android:id="@+id/activity_setting_layout_image_button" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="@dimen/layoutpagobper_margin_left" android:layout_marginRight="@dimen/layoutpagobper_margin_right" android:orientation="vertical" android:gravity="bottom|center_horizontal" android:layout_below="@+id/activity_setting_layout_email_default" android:layout_marginTop="10dp" android:layout_marginBottom="@dimen/layoutpagobper_margin_from_bottom_screen" android:layout_alignParentBottom="true" > <Button android:id="@+id/activity_setting_imageButton_conferma" style="@style/OrangeButtonBperStyle" android:background="@drawable/layoutpagobper_rettangolo_background_imagebutton_orange" android:fontFamily="@font/sf_ui_display_semibold" android:textSize="18sp" android:layout_marginTop="10dp" /> <Button android:id="@+id/activity_setting_imageButton_back" style="@style/BlueButtonLinkBperStyle" android:background="@color/colorLayoutPagoBperButtonLabel" android:fontFamily="@font/sf_ui_display_semibold" android:text="Homepage" android:textSize="18sp" /> </LinearLayout> </RelativeLayout> <!-- inizio sezione navigation drawer --> <include android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="start" layout="@layout/navigation_drawer_layout" /> </androidx.drawerlayout.widget.DrawerLayout>
自定义圆角Shape代码
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item> <shape android:shape="rectangle"> <corners android:bottomLeftRadius="7dp" android:bottomRightRadius="7dp" android:radius="0.8dp" android:topLeftRadius="7dp" android:topRightRadius="7dp" /> <solid android:color="#ffffff" /> <stroke android:width="2dp" android:color="#58979A"/> </shape> </item> </layer-list>
解决方法
核心问题是TextInputLayout作为Material组件的容器,默认负责Hint的绘制与布局,直接给内部的TextInputEditText设置背景会导致Hint位置与背景区域错位。按以下步骤修改:
- 将
android:hint从TextInputEditText移到TextInputLayout中,让容器统一管理Hint的位置。 - 移除
TextInputEditText的android:background,改为给TextInputLayout设置自定义圆角背景。 - 给
TextInputLayout添加app:boxBackgroundMode="none",禁用Material组件默认的输入框背景样式。 - 调整
TextInputLayout的内边距,让Hint和输入内容都能完全落在圆角区域内。
修改后的TextInputLayout相关代码:
<com.google.android.material.textfield.TextInputLayout android:layout_width="@dimen/layoutpagobper_edittext_width" android:layout_height="wrap_content" android:layout_marginLeft="25dp" android:layout_marginTop="10dp" android:background="@drawable/layoutpagobper_rettangolo_edittext_no_icon" android:paddingLeft="12dp" android:paddingTop="12dp" android:paddingBottom="12dp" app:boxBackgroundMode="none" android:hint="@string/edittext_email_hint15"> <com.google.android.material.textfield.TextInputEditText android:id="@+id/activity_setting_edittext_email_default" android:layout_width="match_parent" android:layout_height="wrap_content" android:fontFamily="@font/sf_ui_display_regular" android:textColor="#005157" android:textColorHint="#58979A" android:background="@null"/> </com.google.android.material.textfield.TextInputLayout>
这样修改后,Hint会跟随TextInputLayout的内边距定位,完全落在自定义的圆角背景区域内,同时输入内容也能正确对齐。
内容的提问来源于stack exchange,提问作者GundamRX91
相关产品推荐
相关产品推荐

