Android EditText的一些小用法

来源:互联网 发布:电竞椅推荐 知乎 编辑:程序博客网 时间:2024/06/06 06:02

EditText是我们最常用的控件之一,一般我们也都没有去看它的源码是怎么实现的,所以它有很多的方法与属性,我们也不得而知。

只是书到用时方恨少。

一,比如:产品要求在弹出的软键盘时,Enter键显示搜索或开始等,

也许您跟我一样,咋一听,懵了,辩解到:这android做不到,只是ios自己的,这都要系统支持的等等。

但真的做不到吗?那为什么别的应用又真的可以做到呢?

答案是肯定的,

很简单,直接在xml中加入android:imeOptions这个属性

<EditText    android:id="@+id/edit"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:gravity="left|center_vertical"    android:imeOptions="actionDone"    />

其中android:imeOptions指定了弹出键盘时右下角的按键的显示文字,未指定时默认为回车图标。

android:imeOptions="flagNoExtractUi" //使软键盘不全屏显示,只占用一部分屏幕 同时,这个属性还能控件软键盘右下角按键的显示内容,默认情况下为回车键 
android:imeOptions="actionNone" //输入框右侧不带任何提示 
android:imeOptions="actionGo" //右下角按键内容为'开始' 
android:imeOptions="actionSearch" //右下角按键为放大镜图片,搜索 
android:imeOptions="actionSend" //右下角按键内容为'发送' 
android:imeOptions="actionNext" //右下角按键内容为'下一步' 
android:imeOptions="actionDone" //右下角按键内容为'完成'


二,解决了上一个问题后,产品汪又过来了,拍拍你的肩膀,说:GG,能否在进到这个界面时,就弹出这个软键盘?

所以说产品的妹子都是女汉子,欲望强烈,永不满足。

这个肯定也是可以做的,不喜欢研究源码的码农,当时第一时间想到的是度娘。

但度娘也不是万能的,因为当你 把代码copy到工程中,运行发现还是弹不出,这是为什么呢?

少年还是看源码,仔细思考吧。

EditText中有一个变量是InputMethodManager,这个是一个系统服务。而它有一个方法可以弹出软键盘,参数是View,tags

既然有这个方法那为什么不显示呢?原因很可能就是onResume()的时候,这个View还没有画完。所以onMeasure时,它还没有与Window关联。

那是不是只要在onResume()里面加个延时处理,就可以实现呢?理论是完全可行的:

   @Override    protected void onResume() {        super.onResume();        showSoftInput();    }    /**     * 一进界面就显示软键盘,     * 由于显示软键盘时,要持有EidtText所在Window的引用,     * 而这个要在onMeasure都测量好后,才能给出,     * 所以采用延时处理     */    private void showSoftInput() {        shwoSoftInputHandler.postDelayed(new Runnable() {            @Override            public void run() {                shwoSoftInputHandler.sendMessage(shwoSoftInputHandler.obtainMessage());            }        },100);    }    private Handler shwoSoftInputHandler = new Handler(){        @Override        public void handleMessage(Message msg) {            mEditAccount.requestFocus();            InputMethodManager inputManager = (InputMethodManager) mEditAccount.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);            //inputManager.showSoftInputFromInputMethod(mEditAccount.getWindowToken(),0);            inputManager.showSoftInput(mEditAccount,InputMethodManager.SHOW_IMPLICIT);        }    };

运行,发现确实可以了。

看来少年还得抓紧学习!


0 0
原创粉丝点击