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 】
相关推荐:
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
android nfc常用标签读取总结
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
免费网站制作appp,免费制作app哪个平台好?
如何在宝塔面板中创建新站点?
Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧
Laravel如何实现多对多模型关联?(Eloquent教程)
JavaScript Ajax实现异步通信
Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
如何快速打造个性化非模板自助建站?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
微信小程序 闭包写法详细介绍
安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出
如何用PHP工具快速搭建高效网站?
bootstrap日历插件datetimepicker使用方法
html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】
Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性
轻松掌握MySQL函数中的last_insert_id()
Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)
网页设计与网站制作内容,怎样注册网站?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
linux写shell需要注意的问题(必看)
怎么用AI帮你设计一套个性化的手机App图标?
如何用景安虚拟主机手机版绑定域名建站?
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
北京专业网站制作设计师招聘,北京白云观官方网站?
Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】
如何做网站制作流程,*游戏网站怎么搭建?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
如何用花生壳三步快速搭建专属网站?
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程
Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】
BootStrap整体框架之基础布局组件
如何快速生成可下载的建站源码工具?
laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法
深入理解Android中的xmlns:tools属性
简单实现jsp分页
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】
如何在云主机上快速搭建多站点网站?
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】
如何彻底卸载建站之星软件?
Mybatis 中的insertOrUpdate操作
如何在IIS中新建站点并配置端口与IP地址?
如何用IIS7快速搭建并优化网站站点?
Laravel如何使用.env文件管理环境变量?(最佳实践)
HTML 中动态设置元素 name 属性的正确语法详解

