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

自定义SearchView字体后查询提示文字上移,如何实现垂直居中

问题现象

问题效果示意图
自定义Poppins字体后,SearchView的查询提示文字出现向上偏移,无法和左侧搜索图标垂直居中。

问题原因

自定义字体自带的默认上下留白、行高参数和系统默认字体不一致,导致SearchView内置的输入TextView(search_src_text)基线对齐异常,最终出现偏移。

解决方案

可任选以下一种方式修复:

方案1:Java代码动态调整(适配现有写法)

在原有设置字体的逻辑后新增对齐和边距调整代码即可:

Typeface tf = ResourcesCompat.getFont(getContext(),R.font.poppins);
searchView = getActivity().findViewById(R.id.search_bar);
searchText = (TextView)searchView.findViewById(androidx.appcompat.R.id.search_src_text);
searchText.setTypeface(tf);
// 新增以下调整代码
searchText.setGravity(Gravity.CENTER_VERTICAL);
// 关闭系统默认字体留白,避免自定义字体排版偏移
searchText.setIncludeFontPadding(false);
// 按需调整上下padding,文字上移就增加paddingTop数值,可在1~4dp之间测试适配
int topPadding = dp2px(getContext(), 2);
searchText.setPadding(searchText.getPaddingLeft(), topPadding, searchText.getPaddingRight(), searchText.getPaddingBottom());

补充dp转px的工具方法:

private int dp2px(Context context, float dpVal) {
    return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpVal,
            context.getResources().getDisplayMetrics());
}

方案2:XML样式配置(更易维护)

直接在XML中定义输入框样式,不需要动态设置字体:

  1. 首先在res/values/styles.xml中新增自定义搜索文本样式:
<style name="CustomSearchTextStyle" parent="TextAppearance.AppCompat.SearchView.Query">
    <item name="android:fontFamily">@font/poppins</item>
    <item name="android:gravity">center_vertical</item>
    <item name="android:includeFontPadding">false</item>
    <!-- 按需调整上下padding -->
    <item name="android:paddingTop">2dp</item>
</style>
  1. 给SearchView添加样式引用:
<androidx.appcompat.widget.SearchView
    android:id="@+id/search_bar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_centerInParent="true"
    app:iconifiedByDefault="false"
    app:queryBackground="@android:color/transparent"
    app:queryHint="Search"
    app:searchIcon="@drawable/ic_search"
    <!-- 新增这一行样式引用 -->
    app:queryTextAppearance="@style/CustomSearchTextStyle" />

使用该方案可以删除Java代码中动态设置Typeface的逻辑,样式统一在XML中管理更方便。
你可以根据实际显示效果微调padding数值,直到提示文字和搜索图标视觉对齐即可。

内容的提问来源于stack exchange,提问作者mayra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:30:02