1. ホーム
  2. アンドロイド

編集テキストのAndroidカスタムダイアログは、キーボードの解決策をポップアップすることはできません

2022-02-24 11:44:50
<パス

私の最近の自主開発プロジェクトである「みんなの医学部」は、すでに社内テスト中で、まもなくすべての主要なアプリマーケットで利用できるようになります。以前開発したいくつかのプロジェクトが、何らかの理由で市場に出ていないのは残念なことです。というわけで、最近はとても機嫌がいいのです。
今日は新しいプロジェクトで、弁護士とクライアントのためのアプリを作っているのですが、カスタムダイアログボックスの要件があります。知識は本当にシンプルで、次のような効果です。

しかし、のんびり書き終えてみると、カスタムダイアログボックス内のネストしたEditTextが全くフォーカスを得られず、ソフトキーボードをポップアップできないことに気づき、落ち込んでいます。以下の画像は、以前書いたカスタムダイアログです。


以下は、その解決方法です。
1. ダイアログボックスのレイアウトファイルです。


2. カスタムダイアログのコード


        // Pop up a custom dialog
        LayoutInflater inflater = LayoutInflater.from(OnlineActivity.this);
        View view = inflater.inflate(R.layout.hl_law_dialog, null);

        // Dialog box
        final Dialog dialog = new Dialog(OnlineActivity.this);
        dialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.show();

        // Set the width to the width of the screen
        WindowManager windowManager = getWindowManager();
        Display display = windowManager.getDefaultDisplay();
        WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();
        lp.width = (int) (display.getWidth()); // set the width
        dialog.getWindow().setAttributes(lp);
        dialog.getWindow().setContentView(view);

        final EditText et_obj = (EditText) view.findViewById(R.id.et_obj);// marker
        final EditText et_name = (EditText) view.findViewById(R.id.et_name);// name
        final EditText et_phone = (EditText) view.findViewById(R.id.et_phone);// phone
        TextView tv_go = (TextView) view.findViewById(R.id.tv_go);// confirm delegate
        final ImageView iv_close = (ImageView) view.findViewById(R.id.iv_close);// Confirm delegate


これが正しい書き方なのですが、どこで間違ったのでしょうか?
以前、私が書いた方法は

// Dialogs
        final Dialog dialog = new AlertDialog.Builder(OnlineActivity.this).create();
        dialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.show();

そこで、AlertDialogをDialogに置き換えるだけでこの問題は解決します。

想像してみてください。
1. このコードがない場合、どのような効果があるのでしょうか?

dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

<イグ
写真のように、醜いタイトルバーが表示されます。

2. このコードを追加しない場合、どのような効果があるのでしょうか?

WindowManager windowManager = getWindowManager();
        Display display = windowManager.getDefaultDisplay();
        WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();
        lp.width = (int) (display.getWidth()); // set the width
        dialog.getWindow().setAttributes(lp);

<イグ
ご覧のように、このように狭いダイアログになります。