You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级至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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 03:43:10