android editText

原创 2015年07月07日 00:02:47

一些属性

http://www.cnblogs.com/tianguook/archive/2012/03/02/2376465.html


输入框变为搜索图标

  1. EditText editText = new EditText(this);
  2. editText.setImeOptions(EditorInfo.IME_ACTION_SEARCH);
  3. editText.setInputType(EditorInfo.TYPE_CLASS_TEXT);

xml配置文件:
EditText属性设置:

  
  1. android:imeOptions="actionSearch"
  2. android:inputType="text"

//设置action响应

    editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {

            @Override
            public boolean onEditorAction(TextView v, int actionId,
                    KeyEvent event) {
                if (actionId == EditorInfo.IME_ACTION_SEARCH) {
                    // 隐藏软键盘
                    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
                    System.out.println("login....");
                    return true;
                }

                return false;
            }
        });


监听输入:


/**
     * 动态搜索
     */
    private TextWatcher tbxSearch_TextChanged = new TextWatcher() {

        //缓存上一次文本框内是否为空
        private boolean isnull = true;

        @Override
        public void afterTextChanged(Editable s) {
            if (TextUtils.isEmpty(s)) {
                if (!isnull) {
                    mSearchView.setCompoundDrawablesWithIntrinsicBounds(null,
                            null, mIconSearchDefault, null);
                    isnull = true;
                }
            } else {
                if (isnull) {
                    mSearchView.setCompoundDrawablesWithIntrinsicBounds(null,
                            null, mIconSearchClear, null);
                    isnull = false;
                }
            }
        }

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

        /**
         * 随着文本框内容改变动态改变列表内容
         */
        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            
        }
    };

触摸事件

private OnTouchListener txtSearch_OnTouch = new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
            case MotionEvent.ACTION_UP:
                int curX = (int) event.getX();
                if (curX > v.getWidth() - 38
                        && !TextUtils.isEmpty(mSearchView.getText())) {
                    mSearchView.setText("");
                    int cacheInputType = mSearchView.getInputType();// backup  the input type
                    mSearchView.setInputType(InputType.TYPE_NULL);// disable soft input
                    mSearchView.onTouchEvent(event);// call native handler
                    mSearchView.setInputType(cacheInputType);// restore input  type
                    return true;// consume touch even
                }
                break;
            }
            return false;
        }
    };


private Drawable mIconSearchDefault; // 搜索文本框默认图标
    private Drawable mIconSearchClear; // 搜索文本框清除文本内容图标

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main)
        
        final Resources res = getResources();
        mIconSearchDefault = res.getDrawable(R.drawable.txt_search_default);
        mIconSearchClear = res.getDrawable(R.drawable.txt_search_clear);
        
        mSearchView = (EditText) findViewById(R.id.txtSearch);
        mSearchView.addTextChangedListener(tbxSearch_TextChanged);
        mSearchView.setOnTouchListener(txtSearch_OnTouch);
    }

码说明:

      1. 为输入框绑定触摸事件(模拟点击事件捕捉)。通过监听点击区域判断是否点击清空图片,如果在该区域并且文本框不为空,则清空文本框。

      2. 为输入框绑定文本改变事件监听,根据内容改变动态设置图标显示。

      3. 维持清空操作后软键盘状态。


EditText的background属性设置为@null就搞定了:android:background="@null"


改变边框颜色背景;

http://blog.csdn.net/djcken/article/details/7801966



public final void setHint(CharSequence hint) {

    mHint = TextUtils.stringOrSpannedString(hint);
 
    if (mLayout != null) {
        checkForRelayout();
    }
 
    if (mText.length() == 0) {
        invalidate();
    }
 
    // Invalidate display list if hint is currently used
    if (mEditor != null && mText.length() == 0 && mHint != null) {
        mEditor.invalidateTextDisplayList();
    }
}

在方法的一开始就是对hint文本的转换.由于hint是CharSequence类型的, 说明有希望可以增加一些自定义属性, 我们再看TextUtils.stringOrSpannedString这个方法:

public static CharSequence stringOrSpannedString(CharSequence source) {
    if (source == null)
        return null;
    if (source instanceof SpannedString)
        return source;
    if (source instanceof Spanned)
        return new SpannedString(source);
 
    return source.toString();
}

那么问题来了,我们只要传入的hint是SpannedString或者Spanned类型,就可以保持文本的自定义属性了吗? 答案是肯定的! 直接上代码:

EditText editText = (EditText) rootView.findViewById(R.id.et);
 
// 新建一个可以添加属性的文本对象
SpannableString ss = new SpannableString("喝酒就要喝一斤!");
 
// 新建一个属性对象,设置文字的大小
AbsoluteSizeSpan ass = new AbsoluteSizeSpan(8,true);
 
// 附加属性到文本
ss.setSpan(ass, 0, ss.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
 
// 设置hint
editText.setHint(new SpannedString(ss)); // 一定要进行转换,否则属性会消失
注意最后一步,一定要进行转换, 类型不对会被转换为String对象,这样自定义的额属性就会丢失



   <RelativeLayout
                android:layout_width="0dp"
                android:layout_height="38dp"
                android:layout_weight="1"
                android:background="@drawable/shape_white"
                android:gravity="center_vertical" >

                <ImageButton
                    android:id="@+id/ib1"
                    android:layout_width="20dp"
                    android:layout_height="20dp"
                    android:layout_alignParentLeft="true"
                    android:layout_centerVertical="true"
                    android:layout_marginRight="3dp"
                    android:background="@android:color/transparent"
                    android:paddingBottom="9dp"
                    android:paddingTop="9dp"
                    android:src="@drawable/location_oncall" />

                <EditText
                    android:id="@+id/et_search"
                    android:layout_width="match_parent"
                    android:layout_height="38dp"
                    android:layout_toRightOf="@+id/ib1"
                    android:background="@color/transparent"
                    android:gravity="center_vertical"
                    android:hint="搜索地址"
                    android:paddingLeft="5dp"
                    android:focusable="true"
                    android:focusableInTouchMode="true"
                    android:paddingRight="25dp"
                    android:singleLine="true"
                    android:textColor="@color/mdj_txt_black"
                    android:textSize="@dimen/mdj_title_three" />

                <ImageButton
                    android:id="@+id/search_clear"
                    android:layout_width="20dp"
                    android:layout_height="20dp"
                    android:layout_alignParentRight="true"
                    android:layout_centerVertical="true"
                    android:layout_marginRight="3dp"
                    android:background="@android:color/transparent"
                    android:paddingBottom="9dp"
                    android:paddingTop="9dp"
                    android:visibility="gone"
                    android:src="@drawable/appraise_x" />
            </RelativeLayout>

Android 监听EditText文本输入 EditText监听事和输入事件

Android 监听EditText文本输入 EditText监听事和输入事件
  • menglele1314
  • menglele1314
  • 2016年03月24日 17:38
  • 3672

Android——EditText自定义边框、圆角和其常用属性总结

看下效果图: 执行步骤: 首先在/res/layout文件夹下创建custom_et_layout.xml布局文件,源代码如下: ...
  • xuejingfu1
  • xuejingfu1
  • 2016年06月06日 17:30
  • 17549

android EditText中的几大坑

前言项目中需要用EditText来输入金额,并且默认需要前置”¥”效果如下: 很自然的想到用一个TextView与一个EditText来实现。所以布局文件如下: ...
  • qiyei2009
  • qiyei2009
  • 2016年11月21日 11:31
  • 1664

Android: 以编程方式设置 EditText 只读

EditText et = new EditText(this); et.setInputType(InputType.TYPE_NULL); et.setTextColor(Color.GRAY);
  • lilin_emcc
  • lilin_emcc
  • 2015年01月13日 13:48
  • 2421

Android EditText若干知识点和用法

Android关于EditText的一些知识点。
  • qq_15128547
  • qq_15128547
  • 2016年03月22日 16:02
  • 1140

Android如何使edittext默认失去焦点

有时候的项目当中进入某个页面edittext会自动获取焦点弹出软键盘,用户体验非常不好,那么如何避免这种情况呢?在网上查了一下大概有三种方法。 第一种:设置一个默认的View,在页面加载的时候调用r...
  • a18615971648
  • a18615971648
  • 2017年06月05日 17:25
  • 4736

Android 更改EditText下划线的颜色样式

当你使用AppCompatEditText(Edit Text)时,默认的下划线是跟随系统的#FF4081的颜色值的,通过改变这个值可以改变所有的颜色样式,但是有时候你想单独定义某一个界面的颜色样式,...
  • ngl272
  • ngl272
  • 2017年04月17日 00:07
  • 6345

android EditText 自动换行 设置

项目当中有提交评论和反馈的功能 用的是EditText做为文本编辑器,但是默认的EditText当你输入的内容过多超出屏幕一行 EditText也不会自动换行的,下面给出一个简单的解决办法 ...
  • csdndouniwan
  • csdndouniwan
  • 2017年01月04日 08:33
  • 5425

android 简单的Edittext特效,悬浮标签

原文:点击访问效果图: 使用:依赖:compile 'com.wrapp.floatlabelededittext:library:0.0.6'使用方法很简单,把需要悬浮提示的Edittext控件外...
  • fan7983377
  • fan7983377
  • 2016年06月07日 10:17
  • 1563

自定义android EditText样式及使用方式

开发中需要对EditText样式进行特殊化定义,使用selector进行获取焦点和失去焦点的样式设计: 代码实现: searchText.setBackgroundResource(R.drawa...
  • wolfboy2
  • wolfboy2
  • 2016年06月22日 17:08
  • 1051
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android editText
举报原因:
原因补充:

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