升级至Android SDK 35后,Android 15设备AutoCompleteTextView文本垂直居中异常
Android 15 下 AutoCompleteTextView 文本垂直居中适配方案
问题场景
将MODULE_TARGET_SDK_VERSION升级至35后,Android 15设备上的AutoCompleteTextView文本无法实现垂直居中(光标位置显示正常),但Android 16设备显示正常。对应的布局代码如下:
<AutoCompleteTextView android:id="@+id/input" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_toStartOf="@id/end_views" android:layout_toEndOf="@id/start_views" android:background="@android:color/transparent" android:gravity="center_vertical" android:includeFontPadding="false" android:singleLine="true" android:ellipsize="end" android:imeOptions="flagNoFullscreen|flagNoExtractUi" android:textAlignment="viewStart" android:textCursorDrawable="@drawable/passport_edit_text_cursor" android:textColor="@color/passport_edit_text_input_color" android:textColorHint="@color/passport_edit_text_hint_color" />
适配方案
方案1:显式指定行高
Android 15对文本行高的计算逻辑有调整,显式设置android:lineHeight与文本大小一致,配合includeFontPadding="false"可强制文本垂直居中:
<AutoCompleteTextView ... android:textSize="16sp" android:lineHeight="16sp" android:includeFontPadding="false" ... />
根据实际文本大小调整lineHeight数值即可。
方案2:调整Gravity属性组合
将android:gravity改为center_vertical|start,避免与textAlignment属性冲突导致居中失效:
<AutoCompleteTextView ... android:gravity="center_vertical|start" android:textAlignment="viewStart" ... />
方案3:自定义View强制文本居中
如果上述方案无效,可通过自定义AutoCompleteTextView,重绘时手动调整文本位置:
public class CenteredAutoCompleteTextView extends AutoCompleteTextView { public CenteredAutoCompleteTextView(Context context) { super(context); } public CenteredAutoCompleteTextView(Context context, AttributeSet attrs) { super(context, attrs); } public CenteredAutoCompleteTextView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onDraw(Canvas canvas) { Rect textBounds = new Rect(); getPaint().getTextBounds(getText().toString(), 0, getText().length(), textBounds); // 计算垂直居中的绘制偏移量 int verticalOffset = (getHeight() - textBounds.height()) / 2 - getPaddingTop() + getPaddingBottom(); canvas.save(); canvas.translate(0, verticalOffset); super.onDraw(canvas); canvas.restore(); } }
然后在布局中替换为自定义View:
<com.yourpackage.CenteredAutoCompleteTextView ... android:gravity="center_vertical" android:includeFontPadding="false" ... />
方案4:排查父布局影响
确认AutoCompleteTextView的父布局是否存在额外padding、margin或布局属性挤压显示区域,可尝试给父布局添加android:clipChildren="false"或调整父布局尺寸设置。
内容的提问来源于stack exchange,提问作者Mercury
相关产品推荐
相关产品推荐

