您的位置:首页 > 其它

安卓editview点击时打开软键盘,点击其他地方软键盘消失(fragment中)

2016-10-20 11:41 435 查看
上篇文章写了在activity中如何实现安卓editview点击时打开软键盘,点击其他地方软键盘消失,用到事件分发,重写dispatchTouchEvent处理事件,但是在fragment中没有dispatchTouchEvent,那么就需要在fragment所在的activity中用接口的方法实现。

1、在activity中定义接口

public interface MyTouchListener {  

    public void onTouchEvent(MotionEvent event);  

}  

      

// 保存MyTouchListener接口的列表  

private ArrayList<MyTouchListener> myTouchListeners = new ArrayList<MainActivity.MyTouchListener>();  

      

/** 

* 提供给Fragment通过getActivity()方法来注册自己的触摸事件的方法 

* @param listener 

*/  

public void registerMyTouchListener(MyTouchListener listener) {  

     myTouchListeners.add(listener);  

}  

      

/** 

* 提供给Fragment通过getActivity()方法来取消注册自己的触摸事件的方法 

* @param listener 

*/  

public void unRegisterMyTouchListener(MyTouchListener listener) {  

    myTouchListeners.remove( listener );  

}  

      

/** 

* 分发触摸事件给所有注册了MyTouchListener的接口 

*/  

@Override  

public boolean dispatchTouchEvent(MotionEvent ev) {   

    for (MyTouchListener listener : myTouchListeners) {  

    listener.onTouchEvent(ev);  

    }  

    return super.dispatchTouchEvent(ev);  



2、在fragment中实现接口

@Override  

public View onCreateView(LayoutInflater inflater, ViewGroup container,  

    Bundle savedInstanceState) {  

    View rootView = inflater.inflate(R.layout.home_page, container,false);                                                                                                                                                                                      
                                                       /** 

    * Fragment中,注册 

    * 接收MainActivity的Touch回调的对象 

    * 重写其中的onTouchEvent函数,并进行该Fragment的逻辑处理 

    */  

    MainActivity.MyTouchListener myTouchListener = new MainActivity.MyTouchListener() {  

        @Override  

        public void onTouchEvent(MotionEvent event) {  

        if (ev.getAction() == MotionEvent.ACTION_DOWN) {  

   

             // 获得当前得到焦点的View,一般情况下就是EditText(特殊情况就是轨迹求或者实体案件会移动焦点)  

             View v = getCurrentFocus();  

   

             if (isShouldHideInput(v, ev)) {  

                 hideSoftInput(v.getWindowToken());  

             }  

         }  

        }  

    };  

          

    // 将myTouchListener注册到分发列表  

   ((MainActivity)this.getActivity()).registerMyTouchListener(myTouchListener);                                                                                                                                                                                  
                                                      return rootView;  



其中isShouldHideInput方法和hideSoftInput方法可以参考上篇文章
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: