2013-04-19 4 views
7

У меня есть Activity с одним Fragment на нем. На фрагменте есть один EditText.Как скрыть клавиатуру по диалогу убрать

клавиатура выскакивает, как только фрагмент показан, однако мне удалось блокировать его установку в проявленном андроиде: windowSoftInputMode = «stateHidden»

Однако, также есть кнопка, которая открывает диалоговое окно с другой EditText.

У меня есть метод, который автоматически закрывает клавиатуру при отклонении диалога.

public static void closeInput(final View caller) {  
    caller.post(new Runnable() { 
     @Override 
     public void run() { 
      InputMethodManager imm = (InputMethodManager) caller.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.hideSoftInputFromWindow(caller.getWindowToken(), InputMethodManager.HIDE_IMPLICIT_ONLY); 
     } 
    }); 
} 

Метод не очень красивый, и в нем что-то не так. Диалог EditText имеет inputType="numberDecimal". Кажется, что closeInput() не закрывает клавиатуру, а заменяет ее на стандартное по алфавиту.

Что здесь происходит?

+0

А что при создании вашего диалога вы вызываете этот метод, а затем снова, когда диалог отклоняется? – TronicZomB

+0

Почему я должен вызвать closeInput при создании диалога?В то время, когда вход не отображается –

+0

О, я думал, что это могло произойти, когда появилась первая и вторая клавиатура. – TronicZomB

ответ

13

В моем случае я использовал метод:

public static void closeInput(final View caller) { 
    caller.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      InputMethodManager imm = (InputMethodManager) caller.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.hideSoftInputFromWindow(caller.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 
     } 
    }, 100); 
} 

Он отказывается работать должным образом из-за настроек активности в манифесте, если я помню, вы не можете иметь android:windowSoftInputMode="any_of_these" установить

+0

Работает. Спасибо большое! –

+0

Относительно «если я помню, у вас не может быть андроида: windowSoftInputMode =« any_of_these »» - мне удалось получить все работоспособность, имея «windowSoftInputMode =» adjustNothing | stateAlwaysHidden »и используя' setSoftInputMode (SOFT_INPUT_ADJUST_PAN | SOFT_INPUT_STATE_ALWAYS_HIDDEN); ' – KarolDepka

+3

In мои тесты, вам не нужно 'postDelayed (runnable, 100)'. «100» кажется хрупким. Вместо этого вы можете использовать 'post (runnable)' (работает для меня). Кто-нибудь может подтвердить или опровергнуть это? – KarolDepka

5

в BaseDialog.java

protected void hideSoftKeyboard() { 
    InputMethodManager imm = (InputMethodManager) this.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
    if (imm.isActive()) { 
     imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); 
    } 
} 
+0

Поиск в течение нескольких дней, как это сделать. Пробовал все на каждом форуме, наконец, эту закрытую клавиатуру на выходе из диалога. Спасибо – wizloc

1

в моем случае решение было положить клавиатуры скрыть в диалоге отклонить

dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { 
     @Override 
     public void onDismiss(DialogInterface dialog) { 
      View view = activity.getCurrentFocus(); 
      if (view != null) { 
       InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); 
       inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 
      } 
     } 
    }); 
7

Из фрагментов onCreateView() метода, который вы можете сделать это:

getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN) 

Он будет автоматически скрыть экранную клавиатуру на Отклонить Диалог

+0

он будет закрыт, если действие объявлено с помощью 'android: windowSoftInputMode =" adjustPan "' слишком – crgarridos

1

Борясь с этим вопросом и после рассмотрения ответов здесь большинство, похоже, действительно работает. Поскольку не желал использовать класс, а просто строитель, ответ https://stackoverflow.com/a/36422411/1815624 не является работоспособным решением.

Поняв другие могут иметь этот же вопрос, ответ в настоящее время происходит от обоих: https://stackoverflow.com/a/17393446/1815624 & https://stackoverflow.com/a/32648971/1815624

Так сочетание ответ захватывает вид из самого фрагмента:

(Любой получил причина не?)

void closeKeyboard(final View caller){ 
    caller.post(new Runnable() { 
     @Override 
     public void run() { 
      InputMethodManager imm = (InputMethodManager) caller.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.hideSoftInputFromWindow(caller.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 
     } 
    }); 
} 

...

dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { 
    @Override 
    public void onDismiss(DialogInterface dialog) { 
     closeKeyboard(getView()); 
    } 
}); 
Смежные вопросы