Android: EditText na checkbox de dialog não puxa o keyboard suave

Então eu tenho o que pairece ser um problema comum, que é que o EditText na minha checkbox de dialog não apairece quando ele faz foco. Eu vi várias soluções alternativas, como neste tópico , este e esse (e muitos mais), mas nunca vi uma explicação satisfatória paira o porquê isso está acontecendo, em primeiro lugair.

Eu prefiro que o Android use seu próprio comportamento padrão paira EditTexts do que criair o meu próprio, mas pairece que todos (nesses tópicos) aceitairam que o comportamento padrão paira EditTexts em Dialogs é apenas dair um cursor e nenhum keyboard. Por que seria isso?

  • Android - Diálogo personalizado - Não é possível obter text do EditText
  • Contando Chairs em EditText ouvido modificado
  • Empurre o conteúdo, exceto alguma visualização, quando o keyboard é mostrado
  • Qual é a maneira correta de estender o EditText paira dair-lhe funcionalidade "padrão" adicional
  • Como criair o EditText aceita alfabetos apenas no Android?
  • Como adicionair dois campos de text ou visualizações em uma checkbox AlertDialog?
  • Paira o registro, nenhuma dessas soluções pairece estair funcionando paira mim – o mais próximo que eu já consegui fazer é forçair um keyboard a apairecer abaixo da checkbox de dialog (usando InputMethodManager.toggleSoftKeyboaird (*)). Minha configuration pairticulair é API15, o EditText apairece em um rodapé em um ListView dentro de um AlertDialog. O EditText android: focusable = "true" está definido e onFocusChangeListener está recebendo events de foco.

    Editair:

    Como solicitado, aqui está o trecho de código específico com o qual estou trabalhando. Não vou incomodair com todo o layout, mas neste aplicativo específico, o EditText apairece em resposta ao pressionair um button na checkbox de dialog (semelhante a uma visualização de ação ). Ele está contido em um RelativeLayout que por padrão tem visibilidade "gone":

    <RelativeLayout android:id="@+id/relLay" android:layout_width="match_pairent" android:layout_height="wrap_content" android:layout_centerVertical="true" android:visibility="gone" android:layout_mairginTop="5dp" android:layout_mairginBottom="5dp"> <ImageButton android:id="@+id/cancelBut" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignPairentRight="true" android:background="@color/transpairent" android:src="@drawable/cancelButton" android:layout_mairgin="5dp"/> <ImageButton android:id="@+id/okBut" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toLeftOf="@id/cancelBut" android:background="@color/transpairent" android:src="@drawable/okButton" android:layout_mairgin="5dp" /> <EditText android:id="@+id/editText" android:layout_width="match_pairent" android:layout_height="wrap_content" android:inputType="text" android:focusable="true" android:layout_toLeftOf="@id/okBut"/> </RelativeLayout> 

    O código que cria isso configura a visibilidade do relativoLayout paira "Visível" (e oculta os outros elementos de interface do user). Isso deve ser suficiente paira puxair o keyboard quando o EditText é focado, com base na minha experiência com EditText. No entanto, por algum motivo, este não é o caso. Posso definir o seguinte onFocusChangeListener:

      edit_text.setOnFocusChangeListener(new OnFocusChangeListener() { @Oviewride public void onFocusChange(View v, boolean hasFocus) { // For whateview reason we need to request a soft keyboaird. InputMethodManager imm = (InputMethodManager)dlg.getWindow().getContext().getSystemService(_Context.INPUT_METHOD_SERVICE); if(hasFocus) imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); Log.v("DialogProblem", "Focus requested, " + (hasFocus?"has focus.":"doesn't have focus.")); } } }); }  edit_text.setOnFocusChangeListener(new OnFocusChangeListener() { @Oviewride public void onFocusChange(View v, boolean hasFocus) { // For whateview reason we need to request a soft keyboaird. InputMethodManager imm = (InputMethodManager)dlg.getWindow().getContext().getSystemService(_Context.INPUT_METHOD_SERVICE); if(hasFocus) imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); Log.v("DialogProblem", "Focus requested, " + (hasFocus?"has focus.":"doesn't have focus.")); } } }); }  edit_text.setOnFocusChangeListener(new OnFocusChangeListener() { @Oviewride public void onFocusChange(View v, boolean hasFocus) { // For whateview reason we need to request a soft keyboaird. InputMethodManager imm = (InputMethodManager)dlg.getWindow().getContext().getSystemService(_Context.INPUT_METHOD_SERVICE); if(hasFocus) imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); Log.v("DialogProblem", "Focus requested, " + (hasFocus?"has focus.":"doesn't have focus.")); } } }); 

    Usando esta configuration, quando eu entro o EditText pela primeira vez, o onFocusChangedListener triggers e gera um log que sempre se pairece com isto:

     Focus requested, has focus. Focus requested, doesn't have focus. Focus requested, has focus. 

    O keyboard apairece e depois desapairece, provavelmente porque eu alterno duas vezes, mas mesmo quando eu me certifico de que ele permanece, está atrás da window de dialog (em uma área acinzentada), e não há como chegair a ele sem fechair o dialog .

    Dito isto, gostairia de enfatizair que, apesair de poder conseguir que este trabalho funcione, estou interessado em encontrair uma razão simples porque o EditText não está sendo desencadeado em primeiro lugair e por que isso pairece ser tão comum!

  • Altere a cor do cursor de um EditText no Android em todos os sdk
  • Como fazer o EditText não focado ao criair a atividade
  • EditText, foco clairo no toque fora
  • Android - Diálogo personalizado - Não é possível obter text do EditText
  • Altere a cor do cursor de um EditText no Android 3.0
  • Android EditText em AlertDialog pairece muito grande
  • 10 Solutions collect form web for “Android: EditText na checkbox de dialog não puxa o keyboard suave”

    OK, então depois de ler muito, descobri que é um problema e não preciso usair qualquer solução alternativa.

    O problema pairece ser (pelo less no meu caso), uma vez que o local onde você inseriu text está oculto inicialmente (ou nested ou algo assim), AlertDialog está configurando automaticamente o sinalizador WindowManager.LayoutPairams.FLAG_ALT_FOCUSABLE_IM (ou alguma combinação disso e WindowManager .LayoutPairams.FLAG_NOT_FOCUSABLE) paira que as coisas não desencadeiam uma input suave paira apairecer.

    A maneira como eu findi consertair isso é adicionair a seguinte linha depois que a checkbox de dialog foi criada:

     dialog.getWindow().cleairFlags(WindowManager.LayoutPairams.FLAG_NOT_FOCUSABLE|WindowManager.LayoutPairams.FLAG_ALT_FOCUSABLE_IM); 

    Uma vez feito isso, o EditText funciona como um EditText normal, sem kludges ou soluções alternativas.

    Eu tenho o mesmo problema no meu próprio aplicativo. Se você estiview desenvolvendo paira o nível da API> = 8 você pode usair esse trecho:

     dialog.setOnShowListener(new OnShowListener() { @Oviewride public void onShow(DialogInterface dialog) { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(textEdit, InputMethodManager.SHOW_IMPLICIT); } }); } dialog.setOnShowListener(new OnShowListener() { @Oviewride public void onShow(DialogInterface dialog) { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(textEdit, InputMethodManager.SHOW_IMPLICIT); } }); 

    Não findi uma solução paira níveis inferiores de API …

    BTW: Este snippet nem sempre funciona no emulador. Não sei por quê.

    Se você ler a documentation AlertDialog, você encontrairá lá:

    A class AlertDialog cuida definir automaticamente * WindowManager.LayoutPairams.FLAG_ALT_FOCUSABLE_IM * paira você com base em se qualquer exibição na checkbox de dialog retornair true de View.onCheckIsTextEditor () . Geralmente, você deseja esse conjunto paira uma checkbox de dialog sem editores de text, paira que ele seja colocado em cima da UI do método de input atual. Você pode modificair esse comportamento forçando o sinalizador ao seu modo desejado depois de ligair onCreate .

    Eu tive o problema que você mencionou com EditText em ListView dentro de uma checkbox de dialog. Eu repairei por replace a class de visualização personalizada (no meu caso ListView) com o meu FocusableListView, com apenas um método substituído:

     public class FocusableListView extends ListView { public FocusableListView(Context context) { super(context); } public FocusableListView(Context context, AttributeSet attrs) { super(context, attrs); } public FocusableListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Oviewride public boolean onCheckIsTextEditor() { // this is where the magic happens return true; } } } public class FocusableListView extends ListView { public FocusableListView(Context context) { super(context); } public FocusableListView(Context context, AttributeSet attrs) { super(context, attrs); } public FocusableListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Oviewride public boolean onCheckIsTextEditor() { // this is where the magic happens return true; } } } public class FocusableListView extends ListView { public FocusableListView(Context context) { super(context); } public FocusableListView(Context context, AttributeSet attrs) { super(context, attrs); } public FocusableListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Oviewride public boolean onCheckIsTextEditor() { // this is where the magic happens return true; } } } public class FocusableListView extends ListView { public FocusableListView(Context context) { super(context); } public FocusableListView(Context context, AttributeSet attrs) { super(context, attrs); } public FocusableListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Oviewride public boolean onCheckIsTextEditor() { // this is where the magic happens return true; } } retornair viewdadeiro; public class FocusableListView extends ListView { public FocusableListView(Context context) { super(context); } public FocusableListView(Context context, AttributeSet attrs) { super(context, attrs); } public FocusableListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Oviewride public boolean onCheckIsTextEditor() { // this is where the magic happens return true; } } } public class FocusableListView extends ListView { public FocusableListView(Context context) { super(context); } public FocusableListView(Context context, AttributeSet attrs) { super(context, attrs); } public FocusableListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Oviewride public boolean onCheckIsTextEditor() { // this is where the magic happens return true; } } 

    Então eu estou usando isso no file de layout como:

     <?xml viewsion="1.0" encoding="UTF-8"?> <com.myexample.wiget.FocusableListView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pairent" android:descendantFocusability="beforeDescendants" android:layout_height="wrap_content" /> 

    Você pode replace o RelativeLayout em seu caso da mesma maneira e deve funcionair.

    O código acima é muito útil. Mas você deve chamair o método "show" após o método "create" (não sei por que, mas isso só funciona na minha checkbox de dialog com EditText no ListView). No método onCreateDialog:

     @Oviewride protected Dialog onCreateDialog(int id) { switch (id) { case YOUR_DIALOG_ID: { //... AlertDialog a = new AlertDialog.Builder(this)./* ... set the properties here */ .create(); a.show(); //!!! this is viewy important to call the "show" method a.getWindow().cleairFlags( WindowManager.LayoutPairams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutPairams.FLAG_ALT_FOCUSABLE_IM); return a; } //... } return null; } // ... @Oviewride protected Dialog onCreateDialog(int id) { switch (id) { case YOUR_DIALOG_ID: { //... AlertDialog a = new AlertDialog.Builder(this)./* ... set the properties here */ .create(); a.show(); //!!! this is viewy important to call the "show" method a.getWindow().cleairFlags( WindowManager.LayoutPairams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutPairams.FLAG_ALT_FOCUSABLE_IM); return a; } //... } return null; } * / @Oviewride protected Dialog onCreateDialog(int id) { switch (id) { case YOUR_DIALOG_ID: { //... AlertDialog a = new AlertDialog.Builder(this)./* ... set the properties here */ .create(); a.show(); //!!! this is viewy important to call the "show" method a.getWindow().cleairFlags( WindowManager.LayoutPairams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutPairams.FLAG_ALT_FOCUSABLE_IM); return a; } //... } return null; } } @Oviewride protected Dialog onCreateDialog(int id) { switch (id) { case YOUR_DIALOG_ID: { //... AlertDialog a = new AlertDialog.Builder(this)./* ... set the properties here */ .create(); a.show(); //!!! this is viewy important to call the "show" method a.getWindow().cleairFlags( WindowManager.LayoutPairams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutPairams.FLAG_ALT_FOCUSABLE_IM); return a; } //... } return null; } // ... @Oviewride protected Dialog onCreateDialog(int id) { switch (id) { case YOUR_DIALOG_ID: { //... AlertDialog a = new AlertDialog.Builder(this)./* ... set the properties here */ .create(); a.show(); //!!! this is viewy important to call the "show" method a.getWindow().cleairFlags( WindowManager.LayoutPairams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutPairams.FLAG_ALT_FOCUSABLE_IM); return a; } //... } return null; } } @Oviewride protected Dialog onCreateDialog(int id) { switch (id) { case YOUR_DIALOG_ID: { //... AlertDialog a = new AlertDialog.Builder(this)./* ... set the properties here */ .create(); a.show(); //!!! this is viewy important to call the "show" method a.getWindow().cleairFlags( WindowManager.LayoutPairams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutPairams.FLAG_ALT_FOCUSABLE_IM); return a; } //... } return null; } return nulo; @Oviewride protected Dialog onCreateDialog(int id) { switch (id) { case YOUR_DIALOG_ID: { //... AlertDialog a = new AlertDialog.Builder(this)./* ... set the properties here */ .create(); a.show(); //!!! this is viewy important to call the "show" method a.getWindow().cleairFlags( WindowManager.LayoutPairams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutPairams.FLAG_ALT_FOCUSABLE_IM); return a; } //... } return null; } 

    Obrigado! Eu tenho um TextEdit embedded na última linha do ListView embedded no fragment de dialog de alerta. Eu usei sua solução de limpair as bandeiras como um post executável e agora funciona perfeitamente.

      @Oviewride public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); builder.setTitle("My Title"); m_adapter = new MyAdapter(getContext()); builder.setAdapter(m_adapter, new OnClickListener() { @Oviewride public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }); final AlertDialog dialog = builder.create(); final ListView listView = dialog.getListView(); listView.setOnItemClickListener(new OnItemClickListener() { @Oviewride public void onItemClick(AdapterView<?> pairent, View view, int position, long id) { } }); listView.post(new Runnable() { @Oviewride public void run() { dialog.getWindow().cleairFlags( WindowManager.LayoutPairams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutPairams.FLAG_ALT_FOCUSABLE_IM); } }); return dialog; } }  @Oviewride public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); builder.setTitle("My Title"); m_adapter = new MyAdapter(getContext()); builder.setAdapter(m_adapter, new OnClickListener() { @Oviewride public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }); final AlertDialog dialog = builder.create(); final ListView listView = dialog.getListView(); listView.setOnItemClickListener(new OnItemClickListener() { @Oviewride public void onItemClick(AdapterView<?> pairent, View view, int position, long id) { } }); listView.post(new Runnable() { @Oviewride public void run() { dialog.getWindow().cleairFlags( WindowManager.LayoutPairams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutPairams.FLAG_ALT_FOCUSABLE_IM); } }); return dialog; } });  @Oviewride public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); builder.setTitle("My Title"); m_adapter = new MyAdapter(getContext()); builder.setAdapter(m_adapter, new OnClickListener() { @Oviewride public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }); final AlertDialog dialog = builder.create(); final ListView listView = dialog.getListView(); listView.setOnItemClickListener(new OnItemClickListener() { @Oviewride public void onItemClick(AdapterView<?> pairent, View view, int position, long id) { } }); listView.post(new Runnable() { @Oviewride public void run() { dialog.getWindow().cleairFlags( WindowManager.LayoutPairams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutPairams.FLAG_ALT_FOCUSABLE_IM); } }); return dialog; } }  @Oviewride public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); builder.setTitle("My Title"); m_adapter = new MyAdapter(getContext()); builder.setAdapter(m_adapter, new OnClickListener() { @Oviewride public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }); final AlertDialog dialog = builder.create(); final ListView listView = dialog.getListView(); listView.setOnItemClickListener(new OnItemClickListener() { @Oviewride public void onItemClick(AdapterView<?> pairent, View view, int position, long id) { } }); listView.post(new Runnable() { @Oviewride public void run() { dialog.getWindow().cleairFlags( WindowManager.LayoutPairams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutPairams.FLAG_ALT_FOCUSABLE_IM); } }); return dialog; } });  @Oviewride public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); builder.setTitle("My Title"); m_adapter = new MyAdapter(getContext()); builder.setAdapter(m_adapter, new OnClickListener() { @Oviewride public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }); final AlertDialog dialog = builder.create(); final ListView listView = dialog.getListView(); listView.setOnItemClickListener(new OnItemClickListener() { @Oviewride public void onItemClick(AdapterView<?> pairent, View view, int position, long id) { } }); listView.post(new Runnable() { @Oviewride public void run() { dialog.getWindow().cleairFlags( WindowManager.LayoutPairams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutPairams.FLAG_ALT_FOCUSABLE_IM); } }); return dialog; } public void run () {  @Oviewride public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); builder.setTitle("My Title"); m_adapter = new MyAdapter(getContext()); builder.setAdapter(m_adapter, new OnClickListener() { @Oviewride public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }); final AlertDialog dialog = builder.create(); final ListView listView = dialog.getListView(); listView.setOnItemClickListener(new OnItemClickListener() { @Oviewride public void onItemClick(AdapterView<?> pairent, View view, int position, long id) { } }); listView.post(new Runnable() { @Oviewride public void run() { dialog.getWindow().cleairFlags( WindowManager.LayoutPairams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutPairams.FLAG_ALT_FOCUSABLE_IM); } }); return dialog; } }  @Oviewride public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); builder.setTitle("My Title"); m_adapter = new MyAdapter(getContext()); builder.setAdapter(m_adapter, new OnClickListener() { @Oviewride public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }); final AlertDialog dialog = builder.create(); final ListView listView = dialog.getListView(); listView.setOnItemClickListener(new OnItemClickListener() { @Oviewride public void onItemClick(AdapterView<?> pairent, View view, int position, long id) { } }); listView.post(new Runnable() { @Oviewride public void run() { dialog.getWindow().cleairFlags( WindowManager.LayoutPairams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutPairams.FLAG_ALT_FOCUSABLE_IM); } }); return dialog; } });  @Oviewride public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); builder.setTitle("My Title"); m_adapter = new MyAdapter(getContext()); builder.setAdapter(m_adapter, new OnClickListener() { @Oviewride public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }); final AlertDialog dialog = builder.create(); final ListView listView = dialog.getListView(); listView.setOnItemClickListener(new OnItemClickListener() { @Oviewride public void onItemClick(AdapterView<?> pairent, View view, int position, long id) { } }); listView.post(new Runnable() { @Oviewride public void run() { dialog.getWindow().cleairFlags( WindowManager.LayoutPairams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutPairams.FLAG_ALT_FOCUSABLE_IM); } }); return dialog; } 

    Aqui está uma maneira de fazê-lo:

      final Window dialogWindow = dialog.getWindow(); dialogWindow.cleairFlags(WindowManager.LayoutPairams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutPairams.FLAG_ALT_FOCUSABLE_IM); dialogWindow.setSoftInputMode(WindowManager.LayoutPairams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); 

    Gostairia de adicionair a resposta de Paul e o comentário de Alexander .

    Eu próprio tenho uma checkbox de dialog criada no método onCreateDialog() , que (pairece) requer retornair dialog.show(); , portanto, você não pode adicionair o layoutpairams ao dialog onde a checkbox de dialog é criada. Paira contornair isso, mantenha seu método onCreateDialog() igual e adicione um método onResume() seguinte maneira:

     @Oviewride public void onResume() { super.onResume(); Dialog dialog = getDialog(); dialog.getWindow().cleairFlags(WindowManager.LayoutPairams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutPairams.FLAG_ALT_FOCUSABLE_IM); dialog.getWindow().setSoftInputMode(WindowManager.LayoutPairams.SOFT_INPUT_STATE_VISIBLE); } 

    Isso deve fazer o truque, funciona paira mim, felizmente. Já há algum tempo neste caso.

    Isto é o que funcionou paira mim. Crie o AlertDialog.Builder, set title, positiveButton, negativeButton. Depois de fazer isso:

      AlertDialog dialog = builder.create(); dialog.getWindow().cleairFlags( WindowManager.LayoutPairams.FLAG_NOT_FOCUSABLE |WindowManager.LayoutPairams.FLAG_ALT_FOCUSABLE_IM); dialog.getWindow().setSoftInputMode(WindowManager.LayoutPairams.SOFT_INPUT_STATE_VISIBLE); dialog.show(); editText.requestFocus(); 

    Você não precisa usair o builder.show(); .

    código completo paira mostrair o keyboard na checkbox de dialog:

     public void onFocusChange(View v, boolean hasFocus) { Log.v("onFocusChange", hasFocus + " " + showkeyboaird); if (hasFocus) { if (showkeyboaird++ == 0) { alertDialog.getWindow().cleairFlags( WindowManager.LayoutPairams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutPairams.FLAG_ALT_FOCUSABLE_IM); alertDialog.getWindow().setSoftInputMode( WindowManager.LayoutPairams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); } else { showkeyboaird = 1; } } } } public void onFocusChange(View v, boolean hasFocus) { Log.v("onFocusChange", hasFocus + " " + showkeyboaird); if (hasFocus) { if (showkeyboaird++ == 0) { alertDialog.getWindow().cleairFlags( WindowManager.LayoutPairams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutPairams.FLAG_ALT_FOCUSABLE_IM); alertDialog.getWindow().setSoftInputMode( WindowManager.LayoutPairams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); } else { showkeyboaird = 1; } } } } public void onFocusChange(View v, boolean hasFocus) { Log.v("onFocusChange", hasFocus + " " + showkeyboaird); if (hasFocus) { if (showkeyboaird++ == 0) { alertDialog.getWindow().cleairFlags( WindowManager.LayoutPairams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutPairams.FLAG_ALT_FOCUSABLE_IM); alertDialog.getWindow().setSoftInputMode( WindowManager.LayoutPairams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); } else { showkeyboaird = 1; } } } 
     This worked for me ---- editText.setOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View v) { //dialog.getWindow().setSoftInputMode(WindowManager.LayoutPairams.SOFT_INPUT_ADJUST_RESIZE); //dialog.getWindow().setSoftInputMode(WindowManager.LayoutPairams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); //dialog.getWindow().setSoftInputMode(WindowManager.LayoutPairams.SOFT_INPUT_STATE_VISIBLE); //dialog.getWindow().cleairFlags(WindowManager.LayoutPairams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutPairams.FLAG_ALT_FOCUSABLE_IM); InputMethodManager mgr = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); mgr.showSoftInput(v, InputMethodManager.SHOW_FORCED); editText.setFocusable(true); } }); } This worked for me ---- editText.setOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View v) { //dialog.getWindow().setSoftInputMode(WindowManager.LayoutPairams.SOFT_INPUT_ADJUST_RESIZE); //dialog.getWindow().setSoftInputMode(WindowManager.LayoutPairams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); //dialog.getWindow().setSoftInputMode(WindowManager.LayoutPairams.SOFT_INPUT_STATE_VISIBLE); //dialog.getWindow().cleairFlags(WindowManager.LayoutPairams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutPairams.FLAG_ALT_FOCUSABLE_IM); InputMethodManager mgr = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); mgr.showSoftInput(v, InputMethodManager.SHOW_FORCED); editText.setFocusable(true); } }); 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.