自定义左边含有图片的EditText

原创 2016年08月15日 21:21:06

自定义EditText,当文字输入改变图片

package com.android.drawableedittext;

import android.content.Context;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RelativeLayout;

public class DrawableEditText extends RelativeLayout {

    private Context mContext;
    private EditText mEditText;
    private ImageView mImage;

    // 文本框不为空 图片资源
    private int imgRes;

    // 文本框为空 图片资源
    private int nullImgRes;

    public DrawableEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.mContext = context;
        init();

        // 得到图片资源
        imgRes = attrs.getAttributeResourceValue(null, "imgRes", 0);
        nullImgRes = attrs.getAttributeResourceValue(null, "nullImgRes", 0);
        if (nullImgRes != 0) {
            setDrawable();
        }

        // 设置文字大小
        int textSize = attrs.getAttributeResourceValue(null, "textSize", 0);
        if (textSize != 0) {
            mEditText.setTextSize(textSize);
        }

        // 设置edittext的hint提示
        int hint = attrs.getAttributeResourceValue(null, "hint", 0);
        if (hint != 0) {
            mEditText.setHint(hint);
        }

        // 设置文本颜色
        int textColor = attrs.getAttributeResourceValue(null, "textColor", 0);
        if (textColor != 0) {
            mEditText.setTextColor(textColor);
        }
    }

    // 初始化布局和控件
    public void init() {
        LayoutInflater inflater = LayoutInflater.from(mContext);
        View view = inflater.inflate(R.layout.drawable_edittext, this);
        mEditText = (EditText) view.findViewById(R.id.edittext);
        mImage = (ImageView) view.findViewById(R.id.image);
    }

    // 根据文本框是否为空设置不同的图片
    private void setDrawable() {
        if (mEditText.getText().toString().equals("")) {
            mImage.setImageResource(nullImgRes);
        } else {
            mImage.setImageResource(imgRes);
        }
    }

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        // 文本框的text改变监听
        mEditText.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
            }

            @Override
            public void afterTextChanged(Editable s) {
                setDrawable();
            }
        });
    }

    /**
     * @description 输入框是否有文字
     * @return
     */
    public boolean isEmpty() {
        return getText() == null || getText().length() == 0 ? true : false;
    }

    /**
     * @description 获取输入框内的文字
     * @return
     */
    public String getText() {
        return mEditText.getText().toString();
    }

    /**
     * @description 设置输入框内的文字
     * @return
     */
    public void setText(String s) {
        mEditText.setText(s);
    }
}

EditText布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="46dp"
    android:background="@android:color/white" >

    <EditText
        android:id="@+id/edittext"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/bg_edittext"
        android:paddingLeft="50dp" />

    <RelativeLayout
        android:layout_width="46dp"
        android:layout_height="match_parent" >

        <ImageView
            android:id="@+id/image"
            android:layout_width="22dp"
            android:layout_height="30dp"
            android:layout_centerInParent="true"
            android:scaleType="centerInside" />
    </RelativeLayout>

</RelativeLayout>

运用的布局文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginLeft="20dp"
    android:layout_marginRight="20dp" >

    <com.example.drawableedittext.DrawableEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        imgRes="@drawable/phonenumber_click"
        nullImgRes="@drawable/phonenumber" />

</RelativeLayout>
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

EditText组件drawableLeft属性设置的图片和hint设置的文字之间的距离

有的时候,我们需要在文本框里放置icon图片,并且设置默认提示文字的时候,需要设置两者之间的间距,如下图:                    这里想设置的就是之前的手机icon和”请输入手机号“之...

如何在EditText中设置固定图片——Android移动开发

如下图,在EditText中显示图片 其原理就是在相对布局(RelativeLayout)的基础上用ImageView实现 代码如下: [java] view...

安卓开发——设置EditText的drawableLeft所导入的图片大小

在EditText的使用中,如登录页面的输入框,经常会给EditText设置drawableLeft,即添加左侧图片,但却没有属性对这个图片大小进行控制,只能靠图片自身的分辨率来控制大小。可这时就出现...

Android左边有固定文字的EditText

这个很简单,但如果做项目时临时写出来,也得花几分钟去调试一下实际的效果。相信大家临时因这个小问题打断也不好。所以放出来,供大家即用。 文字输入从光标处开始: package com.idroid.w...
  • yide55
  • yide55
  • 2015年08月23日 20:10
  • 3861

Android TextView里直接显示图片的三种方法

方法一:重写TextView的onDraw方法,也挺直观就是不太好控制显示完图片后再显示字体所占空间的位置关系。一般如果字体是在图片上重叠的推荐这样写。时间关系,这个不付源码了。方法二:利用TextV...

android 在EditText内嵌入图片资源

最近在作一个Android的搜索框,类似于 用到了EditText,但是如何在EditText中嵌入一个提示性的图片呢? 查看了SDK文档,在EditText中没有找到相关属性,最终在Text...
  • chthq
  • chthq
  • 2013年03月12日 14:04
  • 2171

android中EditText点击右边叉叉按钮(或图片)清除输入框内的文字的实现

如题,此功能用到的较多,实现的方法也不难,这里只提供了一种思路。
  • JWfine
  • JWfine
  • 2016年09月02日 19:08
  • 1020

EditText中显示图片

Android的WebView固然强大,不过很多时候还要依赖于Android组件。这些组件的常规的使用方法这里就不必说了,而在这些组件中还有很多比较有趣的使用方法。例如,使用过QQ for Andro...

editText里面图和文字混排并编辑以后存里面的文字和图片信息等

要求: 1、editText放各种样式的文字,比如下划线、加粗等 2、
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自定义左边含有图片的EditText
举报原因:
原因补充:

(最多只允许输入30个字)