Android 无法在EditText控件中打开软键盘

Android 无法在EditText控件中打开软键盘,android,Android,我想创建一个具有以下条件的编辑文本: -正常情况下,用户无法关注此控件。 -当用户单击此控件时,将显示软键栏,用户可以输入此控件 -当用户按下此软键键盘上的enter键或返回设备时,它将关闭并返回到正常视图,控制不聚焦 我尝试了以下代码,但无效:( 启动时,控制未聚焦:确定 单击控件时,第一次单击时,控件为焦点,但不显示软键 在第二次单击中,显示软键 当按下软键B中的“回车”按钮时:返回屏幕,控制未聚焦:确定 当按下设备上的“后退”按钮时,返回到带有控制的屏幕仍为焦点:不正常 public v

我想创建一个具有以下条件的编辑文本: -正常情况下,用户无法关注此控件。 -当用户单击此控件时,将显示软键栏,用户可以输入此控件 -当用户按下此软键键盘上的enter键或返回设备时,它将关闭并返回到正常视图,控制不聚焦

我尝试了以下代码,但无效:( 启动时,控制未聚焦:确定

单击控件时,第一次单击时,控件为焦点,但不显示软键

在第二次单击中,显示软键

  • 当按下软键B中的“回车”按钮时:返回屏幕,控制未聚焦:确定
  • 当按下设备上的“后退”按钮时,返回到带有控制的屏幕仍为焦点:不正常

    public void onCreate(Bundle savedInstanceState)
    {
    final EditText txtSearch = (EditText)this.findViewById(R.id.p60004_txt_search_str);
    txtSearch.setOnClickListener(new OnClickListener() {
    
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            txtSearch.setFocusable(true);//(false);
            txtSearch.setFocusableInTouchMode(true);
            txtSearch.requestFocus();
        }
    });
    txtSearch.setOnKeyListener(new OnKeyListener() {
    
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            // TODO Auto-generated method stub
            if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
                    (keyCode == KeyEvent.KEYCODE_ENTER))
                {
                    String strSearch = txtSearch.getText().toString();
                    if (strSearch != null && strSearch != ""){
                            searchFriend(UserAPIConstants.FRIEND_SEARCH_TYPE_SC, strSearch);
                    }
    
                    hideSoftKeyboard(v);
                    txtSearch.setFocusable(false);
                    txtSearch.setFocusableInTouchMode(false);
    
                }
    
            return false;
        }
    });
    public void hideSoftKeyboard (View view) {
      InputMethodManager imm = (InputMethodManager)this.getSystemService(Context.INPUT_METHOD_SERVICE);
      imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }
    
尝试评论

hidekeyboard(v);
以及Alex Lockwood建议的更改。

onClick()中使用此选项。

要关闭键盘,请使用

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(yourEditText.getWindowToken(), 0);
  • 在包含edittext的xml中,为布局节点放置这些值

     android:focusable="true" 
    android:focusableInTouchMode="true"
    
    并且不要为edittext设置任何可聚焦或可聚焦触摸模式属性

  • 然后在onKey方法中的代码中删除这些行

     txtSearch.setFocusable(false);
       txtSearch.setFocusableInTouchMode(false);
    

     txtSearch.clearFocus();
    
  • 你应该重写这个方法

    onBackPressed() 
    
    像这样

     @Override
      public void onBackPressed() {
     txtSearch.clearFocus();
     //hide the soft keyboard..
    
      }
    

  • 我不太明白你的意思。如果用户不能专注于
    txtSearch
    (条件1),那么用户如何单击
    txtSearch
    输入文本(条件2)?“在代码下但不起作用”…哪个部分不起作用?或者整个代码?我尝试了clearFocus,但它不起作用。此外,onBackPressed也不起作用。您使用的是哪种api?我刚才也做了同样的。它对我来说很好:|@Override public void onBackPressed(){EditText a=((EditText)this.findViewById(R.id.p60004_txt_search_str));a.clearFocus();//隐藏软键盘..隐藏软键盘(a);}你是什么意思?我只是使用安卓2.2并调用txtSearch.clearFocuslet
     @Override
      public void onBackPressed() {
     txtSearch.clearFocus();
     //hide the soft keyboard..
    
      }