EditText方法简单实用

本文详细介绍了 Android 中 EditText 控件的多种使用技巧,包括设置文本选中行为、限制输入类型及长度、控制软键盘显示与行为等。同时,还探讨了如何通过 TransformationMethod 实现文本内容的动态显示与转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. //编辑框每次选择都全部选中

android:selectAllOnFocus="true"//设置属性,当获取焦点时全部选中

编辑框的点击监听中添加

info_text.setText(info_text.getText().toString());//添加这句后实现效果

info_text.selectAll();

 

2. android:inputType="numberDecimal"//设置只能输入数字且不能输入负数

 

3. //点击EditText阻止键盘弹出

public voidsetEditTextNoInputMethod(EditText editText) {

InputMethodManager imm =(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

imm.hideSoftInputFromWindow(editText.getWindowToken(),0);

editText.setInputType(0);

}

 

4. khEdittext.setSelection(khEdittext.getText().toString().length());//设置输入位置在末尾

 

5.j进入界面默认不弹出输入框<activity
            android:name="com.zy.liansuo.activity.xp.Activity"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="stateHidden" >//默认不弹出输入框
        </activity>

6.软键盘不遮盖输入框:

 

可以通过在清单文件中Activity注册时使用windowSoftInputMode属性

在默认情况下会遮住输入框此时的属性值是:stateUnspecified

不指定软键盘的状态(隐藏还是可见)。将由系统选择合适的状态,或依赖主题中的设置。这是对软键盘行为的默认设置。

 

不会遮住

设置属性值:adjustResize

始终调整Activity主窗口的尺寸来为屏幕上的团键盘腾出空间。

 

设置属性值:adjustPan

不调整Activity主窗口的尺寸来为软件盘腾出空间,而是自动平移窗口的内容,是当前焦点永远不被键盘遮盖,让用户始终看到输入内容。这通常不如尺寸调整可取,因为用户可能需要关闭软件盘以达到被遮盖的窗口部分或与这些部分进行交互。

 

·        adjustResize失效情况:activity 设置了全屏属性指Theme.Light.NotittleBar.Fullscreen 或者设置了 activity 对应的主题中 android:windowTranslucentStatus 属性,设置方式为:android:windowTranslucentStatus=true,这时如果对应的页面上含有输入框,将会导致点击输入框时软键盘弹出后键盘覆盖输入框,导致输入框看不见。

fitsSystemWindows=”true”,只有初始的view起作用:如果在布局中不是最外层控件设置fitsSystemWindows=”true”, 那么设置的那个控件高度会多出一个状态栏高度。若有多个view设置了,因第一个view已经消耗掉insect,其他 view 设置了也会被系统忽略

 

参考:https://mp.weixin.qq.com/s?__biz=MzA5MzI3NjE2MA==&mid=2650239474&idx=1&sn=8b4f1ef4e60942e58912c4b31e3dff49&chksm=8863809dbf14098b02b05aae764e8c5aec72122d5156407d8930b2feff58b369877772b1cfb9&mpshare=1&scene=23&srcid=05183OOO42N2cJZvGMJ9qQJM#rd

 

 

7.输入长度限制

 android:maxLength="2"

 

8.两行限制:

android:maxLines="2"

android:ellipsize="end"

 

 

9.单行显示

android:singleLine="true"/./单行显示

 

ndroid:ellipsize="end"当限定试显示行数时省略多余文字的位置,是省略号在开头还是结尾。

 

 

 

10.控制输入内容:不可输入“,”中文逗号
myspinner_showdata.setFilters(new InputFilter[] { new InputFilter() {new InputFilter[] { new InputFilter() {

 



@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
if(",".equals(source)){
return ",";
}
return source;
}
}});

filter就是过滤器,对于EditText我们可以限制输入内容或者说制定输入规则,若我们在布局中限制了字符长度,而在代码中有添加了filter限制,则长度设置就没有效果了,此时我们必须在filter上做上长度限制才可以。

setFilter设置的是filter数组,即可以设置多个规则,我们可以定义一个类实现InputFilter重写 filter方法,在其中写规则。

filter方法中参数意义

source新输入的字符串

start新输入的字符串起始下标,一般为0

end新输入的字符串终点下标,一般为source长度-1

dest输入之前文本框内容

dstart原内容起始坐标,一般为0

dend原内容终点坐标,一般为dest长度-1

限制长度的方法

setFilters(new InputFilter[]{new InputFilter.LengthFilter(10)});

11.只能输入中文,通过Edittext的digits属性控制输入内容

在string.xml添加:

<string name="cesh">0123456789abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.@,~-:*?!_#/=+&amp;^;{}|\&#34;&#34;'\'&lt;\%[]  \>()$\"</string>这个基本包含了所有的非中文字符

其中

"      (&#34; 或 &quot;) 
'      (&#39; 或 &apos;) 
&    (&#38; 或 &amp;) 
<    (&#60; 或 &lt;) 
>    (&#62; 或 &gt;) 

然后对控件设置digits属性

<EditText
        android:id="@+id/myspinner_showdata"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:gravity="center_vertical"
        android:paddingLeft="5dp"
        android:paddingRight="65dp"
        android:background="@drawable/biankuang"
        android:digits="@string/cesh"
        android:text="" />

就可以了

12.两个编辑框之间相互影响修改

借鉴网络上的方法,这个需要熟悉编辑框的回调的三个方法的执行顺序,还有监听的移除监听的使用

edit_two = (EditText) findViewById(R.id.edit_two);
edit_one = (EditText) findViewById(R.id.edit_one);
edit_one.setText("你好");
edit_two.setText("测率");
one = new TextWatcher() {


@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
edit_two.removeTextChangedListener(two);
edit_two.setText(s.toString());
}


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


}


@Override
public void afterTextChanged(Editable s) {
edit_two.addTextChangedListener(two);
}
};
two = new TextWatcher() {


@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
edit_one.removeTextChangedListener(one);
edit_one.setText(s.toString());
}


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


}


@Override
public void afterTextChanged(Editable s) {
edit_one.addTextChangedListener(one);
}
};
edit_two.addTextChangedListener(two);
edit_one.addTextChangedListener(one);

 

13.设置输入框选中后软键盘的搜索按钮展示

在布局中添加

android:imeOptions="actionSearch" 这是现实搜索效果

14.监听输入框的选中后软键盘点击enter或搜索图标

//这是输入框设置点击软键盘的enter键的回调
edit_spm.setOnEditorActionListener(new OnEditorActionListener() {

    @Override
    public boolean onEditorAction(TextView v, int actionId,
                                  KeyEvent event) {     
switch (actionId) {
    case EditorInfo.IME_NULL:
    case EditorInfo.IME_ACTION_SEARCH:
//有search按钮的
        String spm = getUnNullString(edit_spm.getText() + "", "");
        ShowToast(spm);
        if (!"".equals(spm)) {
            postSelect(spm);
            ShowToast(spm);
        }
        break;
}
        return true;
    }
});

还可以监听onKeyDown实现

xs_spm_edittext.setOnKeyListener(new View.OnKeyListener() {
    @Override
    public boolean onKey(View view, int i, KeyEvent keyEvent) {
        if (i == KeyEvent.KEYCODE_ENTER && keyEvent.getAction() == KeyEvent.ACTION_DOWN) {
            String spm=getUnNullString(xs_spm_edittext.getText()+"", "");
            if ("".equals(spm)) {
                ShowToast("商品码为空");
            }
            if (ControlClickTimeUtil.isFastDoubleClickThree()) {
                return false;
            }
            LogUtils.v("XsActivity_onKey", spm);
            searchBenDi(spm);
            xs_spm_edittext.setText("");
            xs_spm_edittext.setFocusable(false);
            try {
                handler.sendEmptyMessageDelayed(1, 300);
            } catch (Exception e) {
                getFoucus();
            }
        }
        return false;
    }
});

15.通过TransformationMethod控制输入框的内容显示

布局

<LinearLayout 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:orientation="vertical"
    tools:context="com.example.settransformationmethod.MainActivity" >

    <EditText
        android:id="@+id/edit_content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <RadioGroup
        android:id="@+id/radiogroup_chose"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <RadioButton
            android:id="@+id/rabtn_xs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="显示" />


        <RadioButton
            android:id="@+id/rabtn_yc"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="隐藏" />

        <RadioButton
            android:id="@+id/rabtn_dx"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="大写" />

        <RadioButton
            android:id="@+id/rabtn_xx"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="小写" />

        <RadioButton
            android:id="@+id/rabtn_th"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="替换" />

        <RadioButton
            android:id="@+id/rabtn_ynr"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="原内容" />

        <RadioButton
            android:id="@+id/rabtn_xshcf"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="显示回车符" />

        <RadioButton
            android:id="@+id/rabtn_ychcf"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="不能用换行回车" />
    </RadioGroup>

</LinearLayout>

public class MainActivity extends Activity {

    private EditText edit_content;
    private RadioGroup radiogroup_chose;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        edit_content = (EditText) findViewById(R.id.edit_content);
        radiogroup_chose = (RadioGroup) findViewById(R.id.radiogroup_chose);
        radiogroup_chose
                .setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {

                    @Override
                    public void onCheckedChanged(RadioGroup group, int checkedId) {
                        // 密码显示控制
                        if (checkedId == R.id.rabtn_xs) {
                            edit_content
                                    .setTransformationMethod(HideReturnsTransformationMethod
                                            .getInstance());
                        } else if (checkedId == R.id.rabtn_yc) {
                            edit_content
                                    .setTransformationMethod(PasswordTransformationMethod
                                            .getInstance());
                        } else if (checkedId == R.id.rabtn_dx) {
                            edit_content
                                    .setTransformationMethod(new UpperCapTransformationMethod());
                        } else if (checkedId == R.id.rabtn_xx) {
                            edit_content
                                    .setTransformationMethod(new LowerCapTransformationMethod());
                        } else if (checkedId == R.id.rabtn_th) {
                            edit_content
                                    .setTransformationMethod(new ChangeTextCapTransformationMethod());
                        } else if (checkedId == R.id.rabtn_ynr) {
                            edit_content
                                    .setTransformationMethod(new BackTextCapTransformationMethod());
                        } else if (checkedId == R.id.rabtn_xshcf) {
                            edit_content
                                    .setTransformationMethod(new HideReturnsTransformationMethod());
                        } else if (checkedId == R.id.rabtn_ychcf) {
                            edit_content
                                    .setTransformationMethod(new SingleLineTransformationMethod());
                        }
                    }
                });
    }

    public class UpperCapTransformationMethod extends
            ReplacementTransformationMethod {

        @Override
        protected char[] getOriginal() {
            char[] aa = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
                    'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
                    'w', 'x', 'y', 'z' };
            return aa;
        }

        @Override
        protected char[] getReplacement() {
            char[] cc = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
                    'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
                    'W', 'X', 'Y', 'Z' };
            return cc;
        }

    }

    public class LowerCapTransformationMethod extends
            ReplacementTransformationMethod {

        @Override
        protected char[] getOriginal() {
            char[] cc = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
                    'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
                    'W', 'X', 'Y', 'Z' };
            return cc;
        }

        @Override
        protected char[] getReplacement() {
            char[] aa = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
                    'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
                    'w', 'x', 'y', 'z' };
            return aa;
        }

    }

    public class ChangeTextCapTransformationMethod extends
            ReplacementTransformationMethod {

        @Override
        protected char[] getOriginal() {
            char[] aa = { '你', '我', '他' };
            return aa;
        }

        @Override
        protected char[] getReplacement() {
            char[] cc = { '黑', '白', '会' };
            return cc;
        }
    }

    public class BackTextCapTransformationMethod extends
            ReplacementTransformationMethod {

        @Override
        protected char[] getOriginal() {
            char[] cc = { '黑', '白', '会' };
            return cc;
        }

        @Override
        protected char[] getReplacement() {
            char[] aa = { '你', '我', '他' };
            return aa;
        }
    }
}

参考:https://blog.youkuaiyun.com/lylodyf/article/details/53036853

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值