全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android EditText搜索框实现图标居中

类似这样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 


相关文章: c++ stringstream用法详解_c++字符串与数字转换利器  个人摄影网站制作流程,摄影爱好者都去什么网站?  岳西云建站教程与模板下载_一站式快速建站系统操作指南  ,如何利用word制作宣传手册?  英语简历制作免费网站推荐,如何将简历翻译成英文?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  历史网站制作软件,华为如何找回被删除的网站?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  如何高效利用200m空间完成建站?  建站之星如何实现五合一智能建站与营销推广?  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  网站制作报价单模板图片,小松挖机官方网站报价?  如何用5美元大硬盘VPS安全高效搭建个人网站?  网站制作价目表怎么做,珍爱网婚介费用多少?  如何解决VPS建站LNMP环境配置常见问题?  网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?  建站之星导航如何优化提升用户体验?  如何在IIS服务器上快速部署高效网站?  安徽网站建设与外贸建站服务专业定制方案  制作公司内部网站有哪些,内网如何建网站?  建站之星与建站宝盒如何选择最佳方案?  如何安全更换建站之星模板并保留数据?  建站之星CMS建站配置指南:模板选择与SEO优化技巧  制作网站的软件免费下载,免费制作app哪个平台好?  音乐网站服务器如何优化API响应速度?  上海网站制作网站建设公司,建筑电工证网上查询系统入口?  金*站制作公司有哪些,金华教育集团官网?  常州企业网站制作公司,全国继续教育网怎么登录?  c# F# 的 MailboxProcessor 和 C# 的 Actor 模型  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  智能起名网站制作软件有哪些,制作logo的软件?  开心动漫网站制作软件下载,十分开心动画为何停播?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  已有域名建站全流程解析:网站搭建步骤与建站工具选择  常州自助建站工具推荐:低成本搭建与模板选择技巧  如何制作一个表白网站视频,关于勇敢表白的小标题?  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  宝塔面板创建网站无法访问?如何快速排查修复?  大型企业网站制作流程,做网站需要注册公司吗?  如何通过主机屋免费建站教程十分钟搭建网站?  如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本  如何获取开源自助建站系统免费下载链接?  沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?  如何通过VPS搭建网站快速盈利?  javascript基本数据类型及类型检测常用方法小结  如何用AWS免费套餐快速搭建高效网站?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  家庭建站与云服务器建站,如何选择更优?  如何通过.red域名打造高辨识度品牌网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。