2011-01-05 193 views
0

好吧,另一个奇怪的问题。我有活动Main.java和DialogLikeActivity.java。打开/关闭软键盘(Galaxy S)

主要

EditText (articleNumber) - phone input type (in .XML) 
Button (articleOK) 
list (list) 

DialogLikeActivity(活动,但有对话的主题风格和机器人:windowSoftInputMode = “stateAlwaysVisible”在清单标签)我有

EditText (articlePackaging) - phone input type (in .XML) 
Button (finish) 

我想要什么?当我输入主要活动键盘与电话输入类型打开,这很好。当我点击EditText字段时,填写一些内容并点击OK静态变量将变为状态1(总是显示键盘) - 它只是主活动中的静态变量。

public static int keyboardMode = 1; 

点击OK打开键盘打开(电话输入类型)的DialogLikeActivity。当我点击确定主恢复简历

@Override 
public void onResume() { 
    super.onResume(); 

    if (keyboardMode == 1) { 
     showKeyboard(articleNumber); 
    } else { 
     hideKeyboard(articleNumber); 
    } 
} 

public static void showKeyboard(View view) { 
    InputMethodManager mgr = (InputMethodManager) myContext.getSystemService(Context.INPUT_METHOD_SERVICE); 
    mgr.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT); 

    ((InputMethodManager) myContext.getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(view, 0); 

    articleNumber.setInputType(InputType.TYPE_CLASS_PHONE); 
} 

public static void hideKeyboard(View view) { 
    InputMethodManager mgr = (InputMethodManager) myContext.getSystemService(Context.INPUT_METHOD_SERVICE); 
    mgr.hideSoftInputFromWindow(view.getWindowToken(), 0); 

    articleNumber.setInputType(0); 
} 

// Listener to showKeyboard if user clicks on EditText field and set InputType to PHONE, insted it would remain (0) 

    articleNumber.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      showKeyboard(articleNumber); 
     } 
    }); 

// Listener so when user touches the list - it hides the keyboard and sets variable on 2 so keyboard is always HIDDEN 

    list.setOnTouchListener(new View.OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 

      hideKeyboard(articleNumber); 
      keyboardMode = 2; 

      return false; 
     } 
    }); 

// Listener so when user clicks on ArticleOK - keyboard is always OPEN 

articleOk.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) {    
       keyboardMode = 1; 

        Intent i = new Intent(NewOrderArticles.this, NewQuantityDialog.class); 
        i.putExtra("articleid", articleId); 
        startActivity(i); 
      } 
     } 
    }); 

并确保键盘与电话输入类型打开。如果我点击/滚动浏览Main keyboardMode变量的列表变成2(总是隐藏) - 所以键盘隐藏(使用名为list.onTouch监听器的hideKeyboard方法)。如果我点击列表中的某个项目,它会再次打开DialogLikeActivity,并打开键盘和手机输入类型。如果我点击确定onResume主键入并隐藏键盘(请参阅代码)。

那看起来好像请看视频(视频中的确定按钮是文章按钮) - Video (3,24 MB)

因此,实际上 - 如果我点击OK(articleOK)按钮 - 键盘总是必须证明,如果是我,不过开始滚动thorugh列表或单击列表中的一些项目 - 键盘必须只有在DialogLikeActivity所示活动,否则在主要它必须保持隐藏(当然,如果我点击顶部的EditText字段,它会再次打开)。

在视频中可以看到HTC Desire的一切工作只是我想要的方式,而是 - 上的Galaxy S的始终显示部分工作,但如果我点击/滚动列表,打开它的了键盘与字母键入(!)而不是隐藏它。问题在哪里?

所以确定按钮 - 始终显示键盘(在Main和DialogLikeActivity中)。如果只在DialogLikeActivity中点击/滚动列表显示键盘。

+0

你在说什么?你有什么问题? – Falmarri 2011-01-05 18:12:57

+0

为什么它在我的HTC Desire上工作,但不在Galaxy S上(它显示键盘布局中的键盘布局被隐藏起来只是隐藏它)? – svenkapudija 2011-01-05 18:24:02

回答

2

我与用数字弹出键盘的EditText有同样的问题。点击确定或取消后,虚拟键盘不会隐藏,并在三星Galaxy S设备上显示带有字母类型的键盘。 它在Emulator 2.1或2.2和我的HTC Hero上运行良好,但在2.2版的Samsung Galaxy S设备上运行得不错。我也试过: mgr.toggleSoftInput(InputMethodManager。HIDE_IMPLICIT_ONLY,0); 但还是没有机会

编辑:确定,只有这一行解决的问题:

mgr.toggleSoftInput(0, 0); 

,没有这两条线:

mgr.hideSoftInputFromWindow(view.getWindowToken(), 0); 
articleNumber.setInputType(0);