即使使用inputmanager也无法隐藏Android软键盘

问题:

我想在按下“添加”按钮时隐藏键盘。 屏幕上有两个EditText 。 键盘不会在开始活动时出现,这很好,但它不会在点击按钮时消失。

在这里输入图像描述

以下是Stack Overflow提供的所有可能的问题,我已经看到其答案对我没有帮助:

关闭/隐藏Android软键盘

以编程方式隐藏/显示Android软键盘

活动开始时如何隐藏软键盘

单击EditText外部后如何在android上隐藏软键盘?

和其他许多人。

这是我的代码:

AddActivity

public class AddActivity extends ActionBarActivity {
EditText text1,text2;
DbHelper db;
ListView l;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add);
    db = new DbHelper(this);
    l = (ListView) findViewById(R.id.listInAddActivity);
    text1 = (EditText) findViewById(R.id.i1);
    text2 = (EditText) findViewById(R.id.i2);
//        text1.setInputType(InputType.TYPE_NULL);
  //      text2.setInputType(InputType.TYPE_NULL);
    hideKeyboard();

    loadDataInAdd();

}
public void addNewTask(View view) {
    String s1 = text1.getText().toString();
    String s2 = text2.getText().toString();
    db.addData(s1,s2);
    loadDataInAdd();
    hideKeyboard();
}
public void loadDataInAdd()
{
    try {
        Cursor cursor = db.fetchData();

        ListAdapter myAdapter = new SimpleCursorAdapter(this, R.layout.tasks,
                cursor,
                new String[]{db._ID, db.COLUMN_1, db.COLUMN_2},
                new int[]{R.id.idnum, R.id.c1, R.id.c2}, 0);
        l.setAdapter(myAdapter);
    }
    catch(NullPointerException e)
    {
        e.printStackTrace();
    }
  //  MainActivity.loadData();
}
private void hideKeyboard() {
    // Check if no view has focus:
    View view = this.getCurrentFocus();
    if (view != null) {
        InputMethodManager inputManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
        inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
    }
}

}

大多数答案都是关于InputManager方法的,但它不适用于我,也就是说,单击按钮时不隐藏键盘。 这是我使用的InputManager另一个变体:

View view = this.getCurrentFocus();
    if (view != null) {
        InputMethodManager inputManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
        inputManager.hideSoftInputFromWindow(view.getWindowToken(), 0);

我也试过这个:

getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN
);

这也不起作用(键盘不会隐藏在单击按钮上)。

我也试过:

     <activity android:name=".AddActivity"
              android:label="@string/app_name"
              android:parentActivityName=".MainActivity"
        android:windowSoftInputMode="stateAlwaysHidden">

    </activity>

   <activity android:name=".AddActivity"
              android:label="@string/app_name"
              android:parentActivityName=".MainActivity"
        android:windowSoftInputMode="stateAlwaysHidden">

    </activity>

有了这个,我的应用程序停止工作:

   InputMethodManager inputManager = (InputMethodManager)
            getSystemService(Context.INPUT_METHOD_SERVICE);

    inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),
            InputMethodManager.HIDE_NOT_ALWAYS);

这个完全隐藏了键盘(即使点击了editText ,键盘也没有出现):

text1.setInputType(InputType.TYPE_NULL);
text2.setInputType(InputType.TYPE_NULL);

我决定为我的按钮使用onclicklistener ,而不是使用另一个函数,并通过onClickAddActivity.xml调用它。

当我决定再次尝试使用OnCliCkListener时,我的一半是通过我的问题。 经过几次随机尝试,以下是适用于我的最终代码:

btn.setOnClickListener(new View.OnClickListener() {


        public void onClick(View v) {
            // TODO Auto-generated method stub

                InputMethodManager inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
                inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);

        }
    });

另一种方法是以如下方式使用OnClickListener

    private View.OnClickListener mListener = new View.OnClickListener() {
    public void onClick(View v) {
        // do something when the button is clicked

        //public void onClick(View v) {

            try {
                InputMethodManager inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
                inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
            } 
 catch (Exception e) {
      e.printStackTrace();
            }

    }
};

像我这样的初学者的重点:

  • 上面的代码应该放在protected void onCreate(Bundle savedInstanceState)
  • 要调用上述代码,请将此代码放置在protected void onCreate(Bundle savedInstanceState)

    btn.setOnClickListener(mListener);

  • 使用try-catch在这两种方法的异常处理( onClickListenersetOnClickListener

  • 在寻找原因onClick中, XML属性不为我工作,而OnClickListener呢,我发现了以下链接有用:

    setOnclickListener vs OnClickListener vs View.OnClickListener

    XML中的Android onClick与OnClickListener

    android:onClick XML属性与setOnClickListener有什么不同?

    OnClick()事件和OnClickListener之间的区别?

    现在,在我的答案中,我意识到我在使用XML中的onClick犯的错误。 以下是我所做的摆脱OnClickListener的方法:

  • 首先,我将隐藏键盘的部分代码移到了onClick的方法中。 在我的情况下,我将hideKeyboard()的整个代码移到addNewTask
  • 关于使用onClick一些重要观点

  • 该方法应该public而且void

  • 它应该有一个View参数,比如View V

  • 最后,工作的代码:

      public void addNewTask(View view) {
        String s1 = text1.getText().toString();
        String s2 = text2.getText().toString();
        db.addData(s1, s2);
        loadDataInAdd();
      //  hideKeyboard(); below is the code to hide keyboard
        if (view != null) {
            InputMethodManager inputManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
            inputManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
        }
    }
    

    概要

    我发现了3种隐藏我的情况的软键盘的方法,使用:

  • OnClickListener:

    private View.OnClickListener mListener = new View.OnClickListener() {
    public void onClick(View v) {
        // do something when the button is clicked
    
        //public void onClick(View v) {
    
            try {
                InputMethodManager inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
                inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
            } 
    
       catch (Exception e) {
      e.printStackTrace();
            }
    
    }
    };
    
  • setOnClickListener:

      btn.setOnClickListener(new View.OnClickListener() {
    
    
        public void onClick(View v) {
            // TODO Auto-generated method stub
    
                InputMethodManager inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
                inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
    
        }
    });
    
  • onClick, XML属性:

    public void addNewTask(View view) {
    String s1 = text1.getText().toString();
    String s2 = text2.getText().toString();
    db.addData(s1, s2);
    loadDataInAdd();
    //  hideKeyboard();
    if (view != null) {
        InputMethodManager inputManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
        inputManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }
    }
    

  • 看一下这个

    View view = this.getCurrentFocus();
    if (view != null) {  
        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }
    

    关闭/隐藏Android软键盘

    链接地址: http://www.djcxy.com/p/93329.html

    上一篇: Cannot hide Android soft keyboard even with inputmanager

    下一篇: Android : show keyboard in edittext