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

项目中需要就顺便研究了一下俩种方法,网络上多为方法二,但本人验证存在问题,可能自己的方法不正确,欢迎留言指正。
方案一:采用事件监听的方式
1.给activity布局文件加入
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:scrollbars="vertical"
    android:id="@+id/activity_main"
    >
 
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的详细探讨会在下面文章继续。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值