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

Ayu*_*Jha 9 keyboard 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);
    }
}

}
Run Code Online (Sandbox Code Playgroud)

大多数答案都与该InputManager方法有关,但它对我不起作用,即单击按钮时不会隐藏键盘.这是InputManager我使用的另一种变体:

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

我也试过这个:

getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN
);
Run Code Online (Sandbox Code Playgroud)

这也不起作用(键盘没有隐藏在点击按钮上).

我也尝试过:

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

    </activity>
Run Code Online (Sandbox Code Playgroud)

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

    </activity>
Run Code Online (Sandbox Code Playgroud)

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

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

    inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),
            InputMethodManager.HIDE_NOT_ALWAYS);
Run Code Online (Sandbox Code Playgroud)

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

text1.setInputType(InputType.TYPE_NULL);
text2.setInputType(InputType.TYPE_NULL);
Run Code Online (Sandbox Code Playgroud)

Ayu*_*Jha 6

我决定使用一个onclicklistenerfor my按钮,而不是使用另一个函数并通过onClickin 调用它AddActivity.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);

        }
    });
Run Code Online (Sandbox Code Playgroud)

另一种方法是以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();
            }

    }
};
Run Code Online (Sandbox Code Playgroud)

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

  • 上面的代码应放在之前 protected void onCreate(Bundle savedInstanceState)
  • 要调用上述内容,请将此代码放入protected void onCreate(Bundle savedInstanceState):

    btn.setOnClickListener(mListener);

  • 使用try-catch了两种方法中的异常处理(onClickListener,setOnClickListener)

在搜索原因时onClick,该XML属性对我OnClickListener不起作用,同时,我发现以下链接有用:

setOnclickListener vs OnClickListener vs View.OnClickListener

Android onClick in XML vs. OnClickListener

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

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

现在,在我的回答中,我意识到我在使用onClickfrom XML时犯了错误.以下是我为摆脱OnClickListeners 所做的事情:

  • 首先,我将隐藏键盘的代码部分移动到了方法中onClick.在这里,在我的情况,我把整个代码里面hideKeyboard()addNewTask.

关于使用的一些要点 onClick

  • 该方法应该publicvoid.

  • 它应该采取一个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);
    }
}
Run Code Online (Sandbox Code Playgroud)

摘要

我找到了三种隐藏软键盘的方法,使用:

  • 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();
            }
    
    }
    };
    
    Run Code Online (Sandbox Code Playgroud)
  • 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);
    
        }
    });
    
    Run Code Online (Sandbox Code Playgroud)
  • 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);
    }
    }
    
    Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

2858 次

最近记录:

9 年,9 月 前