У меня возникли проблемы с пользовательским диалоговым окном DialogFragment, который отображается в полноэкранном режиме. Этот диалог имеет прокручиваемый контент и имеет автозаполнение.DialogFragment всегда изменяется, когда открыта мягкая клавиатура
Первоначально диалог отображается с краем вверху - программно программируется как прозрачный вид в верхней части содержимого макета. Как только объект autocompletetextview сфокусирован, этот запас уменьшается до 0 (таким образом, создается иллюзия, что диалог переходит в полноэкранный режим). В этот момент также отображается клавиатура.
В настоящее время клавиатура уменьшает размер диалогового окна, и кнопка, расположенная в диалоговом окне, перемещается вверх над клавиатурой. Это создает проблему, потому что, как только autocompletetextview потеряет фокус, диалог изменяется, и из-за изменения размера клавиатуры создается также фликкер: они скрыты -> диалог сдвинут внизу -> изменяется диалог в полноэкранный режим -> диалог resisez к исходному размеру
Текущее создание диалога:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
if (!hasTitle()) {
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
}
// the content
//final RelativeLayout root = new RelativeLayout(getActivity());
//root.setLayoutParams(
// new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
//dialog.setContentView(root);
if (position != null) {
WindowManager.LayoutParams windowParams = dialog.getWindow().getAttributes();
windowParams.x = position.x;
windowParams.y = position.y;
dialog.getWindow().setAttributes(windowParams);
} else {
dialog.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
}
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(hasTitle() ? Color.WHITE : Color.TRANSPARENT));
dialog.getWindow().setGravity(Gravity.TOP | Gravity.START);
return dialog;
}
Это работает частично, так как диалог не заполняя ширину, то есть намного меньше.
Что-то делает это исправить, но это создает еще один вопрос:
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setStyle(DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_DeviceDefault_DialogWhenLarge_NoActionBar);
}
Но это будет влиять как на фоне диалога выглядит, и я не могу показаться, чтобы быть в состоянии изменить его из диалогового создания метод.
DialogFragment.STYLE_NO_FRAME сделал трюк! –