10

我知道,驳回机器人tyhe键盘代码隐藏键盘

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0); 

任何人都可以建议我隐藏键盘的方法,如果我们触摸文字以外的区域屏幕中键盘以外的区域。

+2

代码似乎很好。这将迫使键盘在所有情况下都隐藏起来。在某些情况下,您通过'InputMethodManager.HIDE_IMPLICIT_ONLY'作为第二个参数,以确保您只在用户没有明确强制显示时隐藏键盘(通过按住菜单) –

+0

结帐我的答案http://stackoverflow.com/问题/ 4165414 /如何隐藏软键盘上的android-after-click-outside-edittext/36786783#36786783 – Uzair

回答

15

代码驳回Softkeyboard低于:

public static void hideSoftKeyboard(Activity activity) { 
    InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE); 
    inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0); 
} 

你可以把它放在工具类中,或者如果你在一个活动中定义它,避免活动参数,或者调用hideSoftKeyboard(这个)。

您可以编写一个方法遍历活动中的每个视图,并检查它是否为EditText的实例,如果它未向该组件注册setOnTouchListener并且所有内容都将落入适当位置。如果你想知道如何做到这一点,那实际上很简单。这就是你所做的,你写下如下的递归方法。

public void setupUI(View view) { 

    //Set up touch listener for non-text box views to hide keyboard. 
    if(!(view instanceof EditText)) { 

     view.setOnTouchListener(new OnTouchListener() { 

      public boolean onTouch(View v, MotionEvent event) { 
       hideSoftKeyboard(); 
       return false; 
      } 

     }); 
    } 

    //If a layout container, iterate over children and seed recursion. 
    if (view instanceof ViewGroup) { 

     for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) { 

      View innerView = ((ViewGroup) view).getChildAt(i); 

      setupUI(innerView); 
     } 
    } 
} 

呼叫SetcontentView()后,这种方法与PARAMET为您的看法一样的id

RelativeLayoutPanel android:id="@+id/parent"> ... </RelativeLayout> 

然后调用setupUI(findViewById(R.id.parent))

+0

很酷的答案.... :) –

+12

副本http://stackoverflow.com/questions/4165414/how-to-hide-soft-keyboard-on-android-after-click-outside-edittext – Gaurav

+0

虽然上面的链接中最好的答案就是这一个 - http://stackoverflow.com/a/19828165/609782代码少,不需要迭代。 – Darpan

7

尽你所能的方式使用是另外的EditText完成按钮让您onClickListener做这样,

done.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View arg0) { 
     InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
     imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0); 
} 
}); 
6

这可能是老了,但我通过implenting自定义类

得到了这个工作
public class DismissKeyboardListener implements OnClickListener { 

    Activity mAct; 

    public DismissKeyboardListener(Activity act) { 
     this.mAct = act; 
    } 

    @Override 
    public void onClick(View v) { 
     if (v instanceof ViewGroup) { 
      hideSoftKeyboard(this.mAct); 
     } 
    }   
} 

public void hideSoftKeyboard(Activity activity) { 
     InputMethodManager imm = (InputMethodManager) 
     getSystemService(Activity.INPUT_METHOD_SERVICE); 
     imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0); 
} 

最好的p ractice是创建一个Helper类,每个容器的Relative/Linear Layouts都应该实现这个。

****采取注只有主容器应实现这个类(优化)****

,并实现它是这样的:

Parent.setOnClickListener(new DismissKeyboardListener(this)); 

关键字这是活动。所以如果你在片段上,你可以像getActivity()一样使用它;

---竖起大拇指,如果它可以帮助你... ---欢呼拉尔夫---