天天看点

Android问题集(四)——EditText输入完毕后,击屏幕其它区域,隐藏/关闭输入法

使用场景:EditText输入完毕后,点击屏幕其他区域,关闭输入法。

思路:

1、让EditText失去焦点,即让EditText所在的布局layout获取焦点;

2、隐藏输入法。

例一:使LinearLayout布局下的EditText,在输入完毕后,点击屏幕其他区域,关闭输入法:

LinearLayout linearLayout =(LinearLayout)findViewById(R.Id.linearLayout );
linearLayout.setOnTouchListener(new OnTouchListener() {  

            @Override  
            public boolean onTouch(View v, MotionEvent event) {  
                //-------------------------------------------------
                //让linearLayout获取焦点
                linearLayout.setFocusable(true);  
                linearLayout.setFocusableInTouchMode(true);  
                linearLayout.requestFocus();  

                //-------------------------------------------------
                //隐藏输入法
                InputMethodManager imm = (InputMethodManager) 
                    context.getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(linearLayout.getWindowToken(), );
                return false;  
            }  
        }); 
           

拓展:当应用包含较多EditText时,将该方法写到一个类中,用时调用更为便捷:

public class LostFocus  {

    /***************************************************************************
     * 
     * 使线性布局中的EditText失去焦点,并隐藏输入法。
     * 
    ***************************************************************************/
    public void linearLayout(final LinearLayout linearLayout,final Context context) {
        linearLayout.setOnTouchListener(new OnTouchListener() {  

            @Override  
            public boolean onTouch(View v, MotionEvent event) {  
                //-------------------------------------------------
                //linearLayout获取焦点
                linearLayout.setFocusable(true);  
                linearLayout.setFocusableInTouchMode(true);  
                linearLayout.requestFocus();  

                //-------------------------------------------------
                //隐藏输入法
                InputMethodManager imm = (InputMethodManager) 
                        context.getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(linearLayout.getWindowToken(), );
                return false;  
            }  
        }); 

    }

    /***************************************************************************
     * 
     * 使相对布局中的EditText失去焦点,并隐藏输入法。
     * 
     ***************************************************************************/
    public void relativeLayout(final RelativeLayout relativeLayout,final Context context) {
        relativeLayout.setOnTouchListener(new OnTouchListener() {  

            @Override  
            public boolean onTouch(View v, MotionEvent event) {  
                //-------------------------------------------------
                //relativeLayout获取焦点
                relativeLayout.setFocusable(true);  
                relativeLayout.setFocusableInTouchMode(true);  
                relativeLayout.requestFocus();  

                //-------------------------------------------------
                //隐藏输入法
                InputMethodManager imm = (InputMethodManager) 
                        context.getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(relativeLayout.getWindowToken(), );
                return false;  
            }  
        }); 

    }
}
           

在MainActivity中使RelativeLayout布局下的EditText,在输入完毕后,点击屏幕其他区域,关闭输入法:

// --------------------------------------------------------------------------------
LostFocus mLostFocus = new LostFocus();
RelativeLayout mRelativeLayout = (RelativeLayout) 
        findViewById(R.id.relative_layout_login);
// --------------------------------------------------------------------------------
mLostFocus.relativeLayout(mRelativeLayout, MainActivity.this);