2

カスタムAlertDialogが表示されますが、レイアウトのEditTextフィールドをタップすると、ソフトキーボードが自動的に表示されません。私が使用してこのソリューションAndroid: EditText in Dialog doesn't pull up soft keyboardを試してみました:Android:EditTextフォーカスのカスタムAlertDialogにソフトキーボードを表示

dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);

私が正しい場所にコードを入れていない午前とそれは同じくらい簡単かもしれません。私は、アクティビティのonCreateDialogとonPrepareDialog、およびカスタムAlertDialogのコンストラクタとonCreateでそれを試しました。それはうまくいかなかった。

これは、EditTextフィールドにonFocusリスナーを持たせようとするよりもベストプラクティスに見えるので、私はこの解決法を好むでしょう。私は

public LocationDetails(Context context, DetailsSetEventListener detailsSetEventListener) { 
    super(context); 
    this.context = context; 
    this.detailsSetEventListener = detailsSetEventListener; 
    dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM, WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM, WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); 

AlertDialogクラスでこれが動作しない理由を任意のアイデアを、それを試してみた方法

@Override 
protected Dialog onCreateDialog(int id) { 
    Dialog dialog; 
    switch (id) { 
    case LOCATION_DETAILS_DIALOG: 
     dialog = new LocationDetails(this, detailsSetListener); 
     dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM, WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); 
     return dialog; 

    default: 
     return null; 
    } 
} 

protected void onPrepareDialog(final int id,final Dialog dialog){ 
    super.onPrepareDialog(id, dialog); 
    switch (id) { 
    case LOCATION_DETAILS_DIALOG: 
     dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM, WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); 
    } 
} 

活動でそれを試してみた方法

+0

したがって、メッセージとOK/Cancelボタンを提供するだけなので、AlertDialogはキーボードを抑制しているとします。それは単にプロンプ​​トとして使用する必要があります。 私はカスタムダイアログの基本クラスをダイアログに変更しました。私のカスタムDialogが継承する基底クラスを変更するだけで、EditTextフィールドは、期待通りに、フォーカスを受け取ったときにソフト/仮想キーボードをプルアップします。 – mplspug

答えて

9
dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); 

は、私は、このような

public CustomDialog(Context context) { 
     super(context); 
     show(); 
     setContentView(R.layout.widget_custom_dialog); 

     getWindow().clearFlags(
       WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE 
       | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); 
    } 

ダイアログに変更AlertDialogが私のために間違ったダイアログの位置の原因となりますよう、コンストラクタに入れて、私のために正常に動作しますので、私は、このメソッドを使用します。

+0

ありがとう、私も助けて! ^^ – animaonline

+0

clearFlagsは、showの後で呼び出すと動作することに注意してください。 – Alexey

+0

'onStart'で使用したときにうまく働いていました(' show'がNullPointerExceptionでクラッシュする前にそれを使用していました) – hlt