Android EditText搜索框实现图标居中

发布时间 - 2026-01-11 02:14:31    点击率:

类似这样EditText 搜索框,hiht 提示有一个icon并且text内容。

重写EditText :

package mobi.truekey.weapp2.widget;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.EditText;

import mobi.truekey.weapp2.R;

public class SearchView extends EditText {

  private float searchSize = 0;
  private float textSize = 0;
  private int textColor = 0xFF000000;
  private Drawable mDrawable;
  private Paint paint;

  public SearchView(Context context, AttributeSet attrs) {
    super(context, attrs);
    InitResource(context, attrs);
    InitPaint();
  }

  private void InitResource(Context context, AttributeSet attrs) {
    TypedArray mTypedArray = context.obtainStyledAttributes(attrs, R.styleable.searchedit);
    float density = context.getResources().getDisplayMetrics().density;
    searchSize = mTypedArray.getDimension(R.styleable.searchedit_imagewidth, 18 * density + 0.5F);
    textColor = mTypedArray.getColor(R.styleable.searchedit_textColor, 0xFF848484);
    textSize = mTypedArray.getDimension(R.styleable.searchedit_textSize, 14 * density + 0.5F);
    mTypedArray.recycle();
  }

  private void InitPaint() {
    paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    paint.setColor(textColor);
    paint.setTextSize(textSize);
  }

  @Override
  protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    DrawSearchIcon(canvas);
  }

  private void DrawSearchIcon(Canvas canvas) {
    if (this.getText().toString().length() == 0) {
      float textWidth = paint.measureText("搜索");
      float textHeight = getFontLeading(paint);

      float dx = (getWidth() - searchSize - textWidth - 8) / 2;
      float dy = (getHeight() - searchSize) / 2;

      canvas.save();
      canvas.translate(getScrollX() + dx, getScrollY() + dy);
      if (mDrawable != null) {
        mDrawable.draw(canvas);
      }
      canvas.drawText("搜索", getScrollX() + searchSize + 8, getScrollY() + (getHeight() - (getHeight() - textHeight) / 2) - paint.getFontMetrics().bottom - dy, paint);
      canvas.restore();
    }
  }

  @Override
  protected void onAttachedToWindow() {
    super.onAttachedToWindow();
    if (mDrawable == null) {
      try {
        mDrawable = getContext().getResources().getDrawable(R.drawable.search);
        mDrawable.setBounds(0, 0, (int) searchSize, (int) searchSize);
      } catch (Exception e) {

      }
    }
  }

  @Override
  protected void onDetachedFromWindow() {
    if (mDrawable != null) {
      mDrawable.setCallback(null);
      mDrawable = null;
    }
    super.onDetachedFromWindow();
  }

  public float getFontLeading(Paint paint) {
    Paint.FontMetrics fm = paint.getFontMetrics();
    return fm.bottom - fm.top;
  }

}

attr:

<declare-styleable name="searchedit">
  <attr name="imagewidth" format="dimension" />
  <attr name="textSize" format="dimension" />
  <attr name="textColor" format="color" />
</declare-styleable>

drawable背景:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
  <corners android:radius="6dp" />
  <solid android:color="@color/white" />

</shape>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Android  # 搜索框居中  # EditText搜索框居中  # Android自定义View实现搜索框(SearchView)功能  # Android SearchView搜索框组件的使用方法  # Android搜索框SearchView属性和用法详解  # Android搜索框组件SearchView的基本使用方法  # Android搜索框通用版  # Android搜索框(SearchView)的功能和用法详解  # Android开发之搜索框SearchView用法示例  # Android顶部(toolbar)搜索框实现的实例详解  # Android利用EditText如何实现搜索框详解  # Flutter自定义Appbar搜索框效果  # 重写  # 大家多多  # 有一个  # context  # attrs  # mDrawable  # paint  # InitPaint  # void  # super  # InitResource  # searchSize  # textSize  # private  # float  # extends  # int  # textColor  # getColor  # searchedit_imagewidth 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 文字头像制作网站推荐软件,醒图能自动配文字吗?  如何确认建站备案号应放置的具体位置?  Laravel怎么判断请求类型_Laravel Request isMethod用法  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  如何在云主机上快速搭建多站点网站?  Laravel怎么连接多个数据库_Laravel多数据库连接配置  Java类加载基本过程详细介绍  如何在Windows 2008云服务器安全搭建网站?  如何快速搭建高效服务器建站系统?  Laravel如何使用Sanctum进行API认证?(SPA实战)  浅谈javascript alert和confirm的美化  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  专业商城网站制作公司有哪些,pi商城官网是哪个?  javascript基于原型链的继承及call和apply函数用法分析  如何快速搭建二级域名独立网站?  如何快速配置高效服务器建站软件?  LinuxShell函数封装方法_脚本复用设计思路【教程】  Laravel怎么为数据库表字段添加索引以优化查询  如何实现建站之星域名转发设置?  如何在IIS中新建站点并配置端口与IP地址?  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  济南网站建设制作公司,室内设计网站一般都有哪些功能?  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  简历在线制作网站免费版,如何创建个人简历?  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  制作公司内部网站有哪些,内网如何建网站?  php485函数参数是什么意思_php485各参数详细说明【介绍】  七夕网站制作视频,七夕大促活动怎么报名?  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  大型企业网站制作流程,做网站需要注册公司吗?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  如何用免费手机建站系统零基础打造专业网站?  如何在云虚拟主机上快速搭建个人网站?  利用JavaScript实现拖拽改变元素大小  Laravel如何创建自定义Facades?(详细步骤)  如何在云服务器上快速搭建个人网站?  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  如何快速生成橙子建站落地页链接?  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践  如何在阿里云部署织梦网站?  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  如何续费美橙建站之星域名及服务?  详解jQuery中的事件