我想知道当屏幕键盘显示时以及何时消失时,是否有任何方法可以通过Android自动通知。
例如,当我们点击edittext时,会出现ime。会有任何活动电话吗? 当我们按下它时它会消失,同样会有任何电话吗?
我找到了这个帖子Android: which event fires when on screen keyboard appears?,但还没有找到答案。
目的是因为我需要一个事件来自动操纵可见性。我在屏幕顶部有一个带有edittext的活动,在它下面是一个listview和一个linearlayout,它们位于彼此的顶部。为了控制用户看到的内容,我操纵了可见性。默认情况下,最初会显示linearlayout,但是,当用户输入文本时,应显示列表视图。当用户完成输入时,列表视图应该会消失,在这种情况下,屏幕键盘将会关闭。
我尝试使用onFocusChange完成可见性的更改,但是,即使屏幕键盘消失,edittext仍然保留焦点,线性布局永远不会重新出现。
以下是我对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
答案 0 :(得分:2)
你可以在编辑文本中捕捉后退按钮,这会使键盘消失。使用此方法:
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);
}
搜索很棒:onKeyPreIme或Android API
答案 1 :(得分:1)
看来这个线程有一个使用onConfigurationChanged的解决方案:How to capture the "virtual keyboard show/hide" event in Android?