Android基础控件 -- EditText

本文详细介绍了Android中的EditText控件,包括常用属性如hint、inputType和minLines,光标操作如设置光标位置和选择文本,以及如何创建带表情和删除按钮的EditText。还解决了EditText焦点与软键盘冲突的问题,提供了设置windowSoftInputMethod的解决方案。

一. 常用属性

hint、textColorHint、selectAllOnFocus="true"(获取焦点后全选输入款内容)、inputType(输入类型限制)、minLines/maxLines(最低/高的行数)、singleLine、textScaleX/textScaleY(字体左右/上下间距)

capitalize:英文字母大小写设置(默认为none; sentences -- 第一个字母大写; words - 单词字母大写,空格分开; characters -- 所有字母大写)



二. 光标相关方法

edittext.setSelection(int index); :设置光标的位置

edittext.setSelection(int start, int stop); :设置部分选中

edittext.setSelectAllFocus(true); :获取焦点时选中全部文本

edittext.setCursorVisible(false); :设置光标不可见

edittext.getSelectionStart()、edittext.getSelectionEnd(); :获得选中的文本位置



三. 带表情的EditText

可使用SpanableString或者Html来实现

SpannableString spanStr =  new SpanableString("image");

Drawable drawable = getResources.getDrawable(R.drawable.icon);

drawable.setBounds(0, 0, drawable.getIntrunsicWidth(), drawable.getIntrinsicHeight());

ImageSpan span = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE);

spanStr.setSpan(span, 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

int cursor = etittext.getSelectionStart();

edittext.getText().insert(cursor, spanStr);



四. 带删除按钮的EditText

public class EditTextWithDel extends EditText {

    private final static String TAG = "EditTextWithDel";
    private Drawable imgInable;
    private Drawable imgAble;
    private Context mContext;

    public EditTextWithDel(Context context) {
        super(context);
        mContext = context;
        init();
    }

    public EditTextWithDel(Context context, AttributeSet attrs) {
        super(context, attrs);
        mContext = context;
        init();
    }

    public EditTextWithDel(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        mContext = context;
        init();
    }

    private void init() {
        imgInable = mContext.getResources().getDrawable(R.drawable.delete_gray);
        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();
            }
        });
        setDrawable();
    }

    // 设置删除图片
    private void setDrawable() {
        if (length() < 1)
            setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
        else
            setCompoundDrawablesWithIntrinsicBounds(null, null, imgInable, null);
    }

    // 处理删除事件
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (imgInable != null && event.getAction() == MotionEvent.ACTION_UP) {
            int eventX = (int) event.getRawX();
            int eventY = (int) event.getRawY();
            Log.e(TAG, "eventX = " + eventX + "; eventY = " + eventY);
            Rect rect = new Rect();
            getGlobalVisibleRect(rect);
            rect.left = rect.right - 100;
            if (rect.contains(eventX, eventY))
                setText("");
        }
        return super.onTouchEvent(event);
    }
    @Override
    protected void finalize() throws Throwable {
        super.finalize();
    }
}


五. EditText焦点和软键盘冲突解决

(1) 冲突原因:windowSoftInputMethod为Activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题

 该属性可以控制 当有焦点产生时,软键盘是隐藏还是显示,以及是否减少活动主窗口大小以便腾出空间放软键盘。

(2) 解决方法:在AndroidManifest.xml里对应的Activity设置windowSoftInputMethod = "stateVisible" (软键盘通常可见)

                         然后在edittext.requestFocus()即可。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值