安卓点击屏幕空白处消除软键盘--edittext

项目中需要就顺便研究了一下俩种方法,网络上多为方法二,但本人验证存在问题,可能自己的方法不正确,欢迎留言指正。
方案一:采用事件监听的方式
1.给activity布局文件加入
 
  
2:按照一般控件的方式进行事件监听。
activity_main=(LinearLayout) findViewById(R.id.activity_main);
activity_main.setOnTouchListener(new OnTouchListener()
{
			
	public boolean onTouch(View arg0, MotionEvent arg1)
	{
		InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
		return imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
	}
});

方案二:采用基于回调的方法

这种基于回调的方法是对activity中俩个函数的重写,所以说要想实现对全部屏幕的其他操作,所有的action_down操作被检测到,后续操作也需要修改一下。

目前思路仍是不怎么清晰,考虑对主layout重构继承一个Linearlayout,重写里面的onInterceptTouchEvent。这样ViewGroup就可以截获到消息。未进行验证。

下面是网上方法。

dispatchTouchEvent是用来分发事件的,onTouchEvent是用来处理事件

单独采用2(网上大部分都是这种),我这边根本就不能够实现调用,日志不会输出其中的内容;

单独采用1,则点击activity中其他控件也会做出相应的响应,点击edittext就不能完成输入操作,所以不可取。

二者相结合,在dispatch中调用2,效果与单独采用dispatch相同。

 1.@Override
	public boolean dispatchTouchEvent(MotionEvent ev)
	{
		// TODO Auto-generated method stub
		 Log.v("mmmmmmm", "bbbbbbbbbb");
		
	   if(ev.getAction() == MotionEvent.ACTION_DOWN)
	   {  
		     if(getCurrentFocus()!=null && getCurrentFocus().getWindowToken()!=null)
		     {
		    	 InputMethodManager manager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
		    	 manager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);  
		     }  
	    }  
		  return super.onTouchEvent(ev);  
	} 
	
2.	@Override
	public boolean onTouchEvent(android.view.MotionEvent event)
	{
	   Log.v("wwwww", "bbbbbbbbbb");
	   Toast.makeText(getBaseContext(), "How dare you touch me", Toast.LENGTH_SHORT).show();
	   InputMethodManager manager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
	   if(event.getAction() == MotionEvent.ACTION_DOWN){  
		     if(getCurrentFocus()!=null && getCurrentFocus().getWindowToken()!=null){  
		       manager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);  
		     }  
		  }  
		  return super.onTouchEvent(event);  
	}//基于回调的事件处理模型。
关于dispatchtouchevent与ontouchevent的详细探讨会在下面文章继续。

你可能感兴趣的:(安卓点击屏幕空白处消除软键盘--edittext)