android EditText取消焦点且退出软键盘

来源:互联网 发布:oracle删除字段数据 编辑:程序博客网 时间:2024/06/11 04:49

android EditText取消焦点且退出软键盘

最近发现,如果在一个activity中直接加入EditText的话,每次打开这个activity的时候,就会自动打开软键盘,并且点哪里都取消不了。这会给用户一种特别糟糕的体验。
为了解决这种方法,想了一个解决的思路,就是点击背景就取消焦点并且退出软键盘,由于这个方法应该在所有拥有EditText的地方使用,所以就写成了一个工具类,用来调用

package com.baibian.tool;import android.app.Activity;import android.util.Log;import android.view.MotionEvent;import android.view.View;import android.view.ViewGroup;import android.view.inputmethod.InputMethodManager;import android.widget.EditText;import java.util.List;/** * 这个工具类用来处理 */public class UI_Tools {    private List<ViewGroup> listViewGroup;    private List<EditText> listEditText;    public int i = 0;    public UI_Tools() {    }    /**     * 这个方法用来使得EditText,,点击其他地方的时候,取消焦点并且退出软键盘。。在有EditView的地方都应该调用这个方法。     * 传入的三个参数,第一个是活动,第二个是取消焦点要点击的地方,比如背景layout,listview之类的,第三个参数是其中一个edittext,只需要传入一个就可以达到效果     */    public void CancelFocus(final Activity activity, final List<ViewGroup> listViewGroup, final EditText edittext) {        System.out.print(listViewGroup.size());        for (; i < listViewGroup.size(); i++) {            listViewGroup.get(i)                    .setFocusable(true);            listViewGroup.get(i)                    .setFocusableInTouchMode(true);            listViewGroup.get(i)                    .setFocusable(true);            listViewGroup.get(i)                    .setFocusableInTouchMode(true);            listViewGroup.get(i)                    .requestFocus();            listViewGroup.get(i)                    .setOnTouchListener(new View.OnTouchListener() {                        public boolean onTouch(View v, MotionEvent event) {                            // TODO Auto-generated method stub                            InputMethodManager imm = (InputMethodManager) activity.getSystemService(activity.INPUT_METHOD_SERVICE);                            imm.hideSoftInputFromWindow(edittext.getWindowToken(), 0);//这行代码隐藏软键盘                            return false;                        }                    });        }    }    //一个布局的取消焦点    public void CancelFocusOne(final Activity activity, final ViewGroup viewGroup, final EditText edittext) {            viewGroup                    .setFocusable(true);        viewGroup                    .setFocusableInTouchMode(true);        viewGroup                    .setFocusable(true);        viewGroup                    .setFocusableInTouchMode(true);        viewGroup                    .requestFocus();        viewGroup                    .setOnTouchListener(new View.OnTouchListener() {                        public boolean onTouch(View v, MotionEvent event) {                            // TODO Auto-generated method stub                            InputMethodManager imm = (InputMethodManager) activity.getSystemService(activity.INPUT_METHOD_SERVICE);                            imm.hideSoftInputFromWindow(edittext.getWindowToken(), 0);//这行代码隐藏软键盘                            return false;                        }                    });    }}

调用的关键代码:

 UI_Tools ui_tools = new UI_Tools();        ui_tools.CancelFocusOne(this, edit_information_all_layout, user_name_edittext);

新手学习作品,如果改进的地方,希望大神指出,谢谢。

0 0
原创粉丝点击