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

时间:2012-04-18 04:08:16

标签: android

我想用以下条件创建1个编辑文本: - 用户无法正常关注此控件。 - 当用户单击此控件时,将显示soft-keyborad,用户可以输入此控件 - 当用户在此软键盘上或在设备上按回车键时,它会关闭并返回到正常视图,而控制不是焦点。

我尝试了下面的代码,但没有工作:( 启动时,控制不是焦点:确定

单击控件时,在第一次单击时,控件是焦点,但不显示soft-keyborad

在第二次单击中,显示soft-keyborad

  • 按下软键时输入按钮:返回屏幕,控制不对焦:确定
  • 当按下后退按钮设备时,带回控制的屏幕仍然是焦点:不正常

    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);
    }
    

3 个答案:

答案 0 :(得分:1)

  1. 在具有edittext的xml中,为布局节点

    放置这些值
     android:focusable="true" 
    android:focusableInTouchMode="true"
    

    并且不要为编辑文本添加任何可聚焦或可聚焦的触摸模式属性..

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

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

    并放

     txtSearch.clearFocus();
    
  3. 你应该覆盖这个方法

    onBackPressed() 
    
    像这样......

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

答案 1 :(得分:0)

尝试评论

hidekeyboard(v);

以及Alex Lockwood建议的变化。

答案 2 :(得分:0)

onClick()

中使用此功能
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(yourEditText, InputMethodManager.SHOW_IMPLICIT);

关闭键盘使用

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