Android:当屏幕上的键盘出现和消失时,是否有自动调用的侦听器?

Android:当屏幕上的键盘出现和消失时,是否有自动调用的侦听器?,android,on-screen-keyboard,Android,On Screen Keyboard,我在想,当屏幕上的键盘显示和消失时,安卓是否可以自动通知我 例如,当我们单击编辑文本时,会显示ime。会有活动电话吗? 当我们按下返回键时,它消失了,同样会有任何偶数呼叫吗 我找到了这条线索,但是还没有找到答案 其目的是因为我需要一个事件来自动操纵可见性。我有一个活动,在屏幕顶部有一个edittext,在它下面有一个listview和一个linearlayout,它们位于彼此的顶部。为了控制用户看到的内容,我操纵可见性。默认情况下,最初显示linearlayout,但是,当用户输入文本时,应该显

我在想,当屏幕上的键盘显示和消失时,安卓是否可以自动通知我

例如,当我们单击编辑文本时,会显示ime。会有活动电话吗? 当我们按下返回键时,它消失了,同样会有任何偶数呼叫吗

我找到了这条线索,但是还没有找到答案

其目的是因为我需要一个事件来自动操纵可见性。我有一个活动,在屏幕顶部有一个edittext,在它下面有一个listview和一个linearlayout,它们位于彼此的顶部。为了控制用户看到的内容,我操纵可见性。默认情况下,最初显示linearlayout,但是,当用户输入文本时,应该显示listview。当用户完成输入时,listview应该消失,在这种情况下,屏幕键盘将关闭

我尝试使用onFocusChange来完成可见性的更改,但是,即使屏幕上的键盘消失,编辑文本仍然保持焦点,线性布局也不会再次出现

下面是我对onFocusChange的实现

@Override
public void onFocusChange(View v, boolean hasFocus) 
{
    if(v.getId()==R.id.search_screen_keyword_textbox)
    {
        if(hasFocus)
        {
            filterSection.setVisibility(View.GONE);
            autoComSection.setVisibility(View.VISIBLE);
        }
        else
        {
            filterSection.setVisibility(View.VISIBLE);
            autoComSection.setVisibility(View.GONE);
        }
    }       
    else if(v.getId()==R.id.search_screen_location_textbox)
    {
        if(hasFocus)
        {
            filterSection.setVisibility(View.GONE); 
            autoComSection.setVisibility(View.VISIBLE);
        }
        else
        {
            filterSection.setVisibility(View.VISIBLE);
            autoComSection.setVisibility(View.GONE);
        }
    }
    else
    {
        filterSection.setVisibility(View.VISIBLE);
        autoComSection.setVisibility(View.GONE);
    }
}

如果有人对此有任何想法,一定要告诉我D

这个线程似乎有一个使用OnConfiguration Changed的解决方案:

在edittext中,您可以捕捉后退按钮,这将使键盘消失。使用此方法:

 public boolean onKeyPreIme(int keyCode, KeyEvent event) {
   if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
           // Do your thing here
           return false;
   }
   return super.dispatchKeyEvent(event);
  }

搜索很好:或者

请记住,有些设备带有硬件键盘。如果在您的设计中需要切换到listview,那么当用户开始在物理键盘上键入时,切换到listview可能也是必要的。也许你更应该在行中实现一些东西,而不是尝试检测软键盘的存在。listview的目的是取代autocompletetextview的下拉菜单。由于设计限制,我无法使用下拉菜单。相反,我必须实现建议文本列表,以显示在listview上/<代码>自动完成文本视图在键入一定数量的字符时显示其下拉列表。我认为您应该实现类似的控件,以便它可以与任何类型的键盘配合使用。另一方面,软输入覆盖了横向的整个屏幕,因此无论如何你的列表视图都不可见。该应用程序仅在纵向atm中可用。是的,当前listview只会在至少键入2个字符时开始过滤。我会记住硬件键盘,注意点好,谢谢!嗯,我想在按下back时实现catch,但是,我需要考虑到屏幕键盘可能通过其他方法消失的其他情况……还必须记住snake指出的h/w键盘的存在。目前,我正在考虑实施一个非常糟糕的黑客攻击,点击所有地方,这将强制将焦点从edittext上移开,这将导致linearlayout再次出现。此外,当键盘消失时,我也会将焦点移开。我看一看,也许可以与其他解决方案合并:D谢谢!