Android 如何在searchview和edittext上永久隐藏软键盘

Android 如何在searchview和edittext上永久隐藏软键盘,android,keyboard,Android,Keyboard,我想在我的应用程序中永久地隐藏软键盘。所以我可以使用我的自定义键盘。我检查了许多解决方案,但仍然出现了软键盘。这是我注册searchview的代码 EditText mEditText; SearchView mSearchView; public void registerSearchView(final SearchView sview, final MenuItem searchItem ) { mSearchView = sview;

我想在我的应用程序中永久地隐藏软键盘。所以我可以使用我的自定义键盘。我检查了许多解决方案,但仍然出现了软键盘。这是我注册searchview的代码

   EditText mEditText;
    SearchView mSearchView;
    public void registerSearchView(final SearchView sview, final MenuItem searchItem ) {
        mSearchView = sview;
        SearchManager searchManager = (SearchManager) mHostActivity.getSystemService(Context.SEARCH_SERVICE);
        mSearchView.setSearchableInfo(searchManager.getSearchableInfo(mHostActivity.getComponentName()));
        mEditText = (EditText) mSearchView.findViewById(R.id.search_src_text);
        ImageView closeButton = (ImageView) mSearchView.findViewById(R.id.search_close_btn);
        closeButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mEditText.getText() == null || mEditText.getText().length() < 1) {
                    mSearchView.onActionViewCollapsed();
                    MenuItemCompat.collapseActionView(searchItem);
                    hideCustomKeyboard();
                } else {
                    mEditText.setText("");
                    mSearchView.setQuery("", false);
                }
                //Collapse the search widget
            }
        });
        mEditText.setOnTouchListener(onTouch);
        mSearchView.setOnTouchListener(onTouch);
        mEditText.setOnFocusChangeListener(oFocusChange);
        mSearchView.setOnFocusChangeListener(oFocusChange);
        mEditText.setOnClickListener(onClickListener);
        mSearchView.setOnClickListener(onClickListener);
        mSearchView.setOnSearchClickListener(onClickListener);


    private View.OnClickListener onClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ((InputMethodManager) mHostActivity.getSystemService(ActionBarActivity.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(v.getWindowToken(), 0);
            showCustomKeyboard(v);
            v.clearFocus();
            v.requestFocus();

        }
    };
    private View.OnTouchListener onTouch = new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent motionEvent) {
            if (mEditText.getText()==null || mEditText.getText().length() < 1){
                v.clearFocus();
                v.requestFocus();
            }
            ((InputMethodManager) mHostActivity.getSystemService(ActionBarActivity.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(v.getWindowToken(), 0);
            v.onTouchEvent(motionEvent);
            return true;
        }
    };
    private View.OnFocusChangeListener  oFocusChange = new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean b) {
            if (b == false) {
                hideCustomKeyboard();
            } else {
                ((InputMethodManager) mHostActivity.getSystemService(ActionBarActivity.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(v.getWindowToken(), 0);
                showCustomKeyboard(v);
            }
        }
    };
EditText-mEditText;
搜索视图;
公共无效注册表搜索视图(最终搜索视图视图,最终菜单项搜索项){
mSearchView=sview;
SearchManager SearchManager=(SearchManager)mHostActivity.getSystemService(Context.SEARCH\u服务);
mSearchView.setSearchableInfo(searchManager.getSearchableInfo(mHostActivity.getComponentName());
mEditText=(EditText)mSearchView.findViewById(R.id.search\u src\u text);
ImageView关闭按钮=(ImageView)mSearchView.findViewById(R.id.search\u close\u btn);
closeButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
if(mEditText.getText()==null | | mEditText.getText().length()<1){
mSearchView.onActionViewCollapsed();
MenuItemCompat.collapseActionView(搜索项);
hideCustomKeyboard();
}否则{
mEditText.setText(“”);
mSearchView.setQuery(“,false);
}
//折叠搜索小部件
}
});
mEditText.setOnTouchListener(onTouch);
mSearchView.setOnTouchListener(onTouch);
mEditText.setOnFocusChangeListener(oFocusChange);
mSearchView.setOnFocusChangeListener(oFocusChange);
mEditText.setOnClickListener(onClickListener);
mSearchView.setOnClickListener(onClickListener);
mSearchView.setonsearch clickListener(onClickListener);
private View.OnClickListener OnClickListener=new View.OnClickListener(){
@凌驾
公共void onClick(视图v){
((InputMethodManager)mHostActivity.getSystemService(ActionBarActivity.INPUT_方法_服务)).hideSoftInputFromWindow(v.getWindowToken(),0);
显示自定义键盘(v);
v、 clearFocus();
v、 requestFocus();
}
};
private View.OnTouchListener onTouch=新建视图。OnTouchListener(){
@凌驾
公共布尔onTouch(视图v,MotionEvent){
if(mEditText.getText()==null | | mEditText.getText().length()<1){
v、 clearFocus();
v、 requestFocus();
}
((InputMethodManager)mHostActivity.getSystemService(ActionBarActivity.INPUT_方法_服务)).hideSoftInputFromWindow(v.getWindowToken(),0);
v、 onTouchEvent(运动事件);
返回true;
}
};
cuschange的private View.OnFocusChangeListener=new View.OnFocusChangeListener(){
@凌驾
公共void onFocusChange(视图v,布尔b){
如果(b==false){
hideCustomKeyboard();
}否则{
((InputMethodManager)mHostActivity.getSystemService(ActionBarActivity.INPUT_方法_服务)).hideSoftInputFromWindow(v.getWindowToken(),0);
显示自定义键盘(v);
}
}
};

将此添加到您的清单中:

 <activity android:name="com.your.package.ActivityName"
      android:windowSoftInputMode="stateHidden"  />

这将起作用,因为您可以强制android隐藏键盘

public static void disableSoftInputFromAppearing(EditText editText) {
    if (Build.VERSION.SDK_INT >= 11) {
        editText.setRawInputType(InputType.TYPE_CLASS_TEXT);
        editText.setTextIsSelectable(true);
    } else {
        editText.setRawInputType(InputType.TYPE_NULL);
        editText.setFocusable(true);
    }
}
以上代码将在未来工作

以及搜索视图

 mSearchView.clearFocus();

将解决此问题

公共静态无效HIDESOFTKEYOUD(视图视图,活动活动){InputMethodManager imm=(InputMethodManager)活动.getSystemService(上下文.INPUT_方法_服务);imm.hideSoftInputFromWindow(视图.getWindowToken(),0);}公共静态无效HIDEKEYBORD(活动){InputMethodManager imm=(InputMethodManager)activity.getSystemService(Context.INPUT_METHOD_SERVICE);View f=activity.getCurrentFocus();if(null!=f&&null!=f.getWindowToken()&&EditText.class.isAssignableFrom(f.getClass())imm.hideSoftInputFromWindow(f.getWindowToken(),0);else activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_输入_状态_始终_隐藏);}它只隐藏键盘一次。当您触摸searchview或edittext时,键盘会再次出现。尝试使edittext不可单击,并添加android:WindowsOfInputMode:android:clickable=“false”android:cursorVisible=“false”android:focusable=“false”android:focusableInTouchMode=“false”我可以使用edittext.setInputType(InputType.TYPE_NULL);但我想使用edittext和searchview正常工作。这样做,并将touch listener添加到edittext,让它请求焦点(或不请求焦点)将监听器添加到键盘的键中,单击每个键,然后使用…setTextView(旧值+新键)将keyvalue添加到编辑文本中,这有什么问题吗?我很感激你的建议,但是当用户想要删除文本时?当用户选择文本时?等等。但是放在哪里呢?我用同样的方法隐藏键盘,并在onClick和onTouch上实现了它,但键盘仍然出现在searchview上。检查它是否在onPostResume中工作,就像通常在ca中一样编辑文本的se在oncreate()中工作每次单击edittext或searchview时,键盘都会出现。如果我们将其隐藏在oncreate中,它将只隐藏一次,但我想永久隐藏它。我刚刚更新了答案,使用上面的代码,它肯定会起作用!!只需将oncreate中的所有edittext传递给此方法即可!!@user934820:如果无法解决此问题,请告诉我e、 对我来说,这段代码适用于自定义键盘场景