Что не так с расширением AlertDialog. Почему нет автоматического IME в EditText в диалоговом окне? - PullRequest
0 голосов
/ 09 декабря 2011

У меня есть этот диалог (я упрощаю свой вариант использования):

class EditShoppingListDialog extends AlertDialog {

    public EditShoppingListDialog(Context context) {
        super(context/*, R.style.AppCustomDialog*/);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.dialog_addshoppinglist);
        setTitle("Mike Testing");
    }
}

Я создаю и использую этот подкласс AlertDialog вне метода OnCreateDialog (в onContextItemSelected моей деятельности) следующим образом:

AlertDialog dialog = new EditShoppingListDialog(this);
dialog.show();

Теперь я работаю с этой кодовой базой уже более месяца и никогда не видел никаких проблем, что заставляет меня задуматься, почему они рекомендуют использовать AlertDialog.Builder для создания пользовательских диалогов.

Когда я развернул свое приложение на реальном устройстве, я сразу начал видеть проблемы. Наиболее блокирующим из них является то, что я не могу заставить программную клавиатуру (IME?) Отображаться, даже когда я нажимаю на поле EditText в AlertDialog.

Вот лучшая часть; Если я скажу:

class EditShoppingListDialog extends Dialog {
    ...
}

IME появляется автоматически, если я нажимаю на EditText в диалоговом окне. Я нашел этот поток , но принятое решение не работает с AlertDialog.

Однако я обнаружил, что выполнение этого в OnCreate моего производного AlertDialog помогает отображать IME, но оно скрывается за диалогом, и я не могу с ним взаимодействовать:

InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT,0);

Мне очень жаль за потерянный пост, но я потратил на это более 5 часов и был бы очень признателен за помощь. Причина, по которой я настаиваю на расширении AlertDialog, заключается в том, что мне нужен диалог без строки заголовка, и в документации Android Dialog говорится, что я не могу иметь диалог без строки заголовка.

Ответы [ 2 ]

2 голосов
/ 09 декабря 2011

Легко установить диалог без заголовка. создайте стиль, как показано ниже,

 <style name="no_title_dialog" parent="@android:style/Theme.Dialog">
    <item name="android:windowNoTitle">true</item>
</style>

начальный диалог с

Dialog notitleDialog = new Dialog(this, R.style.no_title_dialog);

должно появиться диалоговое окно без заголовка

0 голосов
/ 09 декабря 2011

Наличие AlertDialog без строки заголовка вовсе не волшебство:

AlertDialog.Builder builder;
AlertDialog alertDialog;

TextView v = new TextView(this);
v.setText("Should have no Bar...");

builder = new AlertDialog.Builder(this);
builder.setView(v);
alertDialog = builder.create();

alertDialog.show();

Это выглядит так:

no title bar

(Нетэто не Toast!).Если это не то, что вы хотели, вам следует более четко указать, что вы подразумеваете под «Мне нужен диалог без строки заголовка».

...