DialogFragment не изменяется при нажатии на клавиатуру

Я пытаюсь использовать SherlockDialogFragment чтобы спросить какой-либо ввод от пользователя. Все работает отлично на моем телефоне (Galaxy Nexus, 4.2), но на меньшем телефоне (эмулятор 2.3.3), когда появляется клавиатура, он закрывает две кнопки диалогового окна «Диалог»:

Диалог, покрытый клавиатурой

Мой макет находится внутри ScrollView, и я меняю softInputMode на SOFT_INPUT_ADJUST_RESIZE на моем onViewCreated . Я также пробовал SOFT_INPUT_ADJUST_PAN , и он не работал

MyCustomDialog.java

 public class AddTaskDialog extends SherlockDialogFragment implements OnDateSetListener{ //... @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); } public Dialog onCreateDialog(Bundle savedInstanceState) { // Use the Builder class for convenient dialog construction AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); this.inflater = getActivity().getLayoutInflater(); View mainView =inflater.inflate(R.layout.custom_dialog, null); builder.setView(mainView); this.taskNote = (EditText) mainView.findViewById(R.id.ET_taskNote); this.taskText = (EditText) mainView.findViewById(R.id.ET_taskText); this.taskValue = (EditText) mainView.findViewById(R.id.ET_taskValue); /* * Other stuff */ builder.setTitle(getString(R.string.new_task, hType.toString())) .setPositiveButton(R.string.dialog_confirm_button, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { //... } }) .setNegativeButton(R.string.dialog_cancel_button, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // User cancelled the dialog } }); // Create the AlertDialog object and return it return builder.create(); } } 

И вот мой макет:

custom_dialog.xml

 <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="@color/abs__background_holo_light"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingLeft="@dimen/activity_vertical_margin" android:paddingRight="@dimen/activity_vertical_margin"> <TextView android:id="@+id/TV_taskText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/task_text" android:textAppearance="?android:attr/textAppearanceLarge" /> <EditText android:id="@+id/ET_taskText" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:ems="10" android:hint="@string/create_task_hint" android:inputType="textNoSuggestions" android:singleLine="true" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingLeft="@dimen/activity_vertical_margin" android:paddingRight="@dimen/activity_vertical_margin" > <TextView android:id="@+id/TV_taskNote" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/task_note" android:textAppearance="?android:attr/textAppearanceLarge" /> <EditText android:id="@+id/ET_taskNote" android:layout_width="0dip" android:layout_height="wrap_content" android:minLines="2" android:layout_weight="1" android:ems="10" android:inputType="textMultiLine" android:hint="@string/task_note_hint"> </EditText> </LinearLayout> <LinearLayout android:id="@+id/repeat_days" android:layout_width="wrap_content" android:layout_height="48dp" android:layout_gravity="top" android:orientation="horizontal" android:visibility="gone" android:paddingLeft="@dimen/activity_vertical_margin" android:paddingRight="@dimen/activity_vertical_margin"> <!-- Day buttons are put here programatically --> </LinearLayout> </LinearLayout> 

Итак, вы могли бы помочь мне и направить меня на то, как показывать эти кнопки? Либо для PAN просмотра, либо для изменения размера …

Solutions Collecting From Web of "DialogFragment не изменяется при нажатии на клавиатуру"

Задайте свойство windowSoftInputMode для adjustNothing в AndroidManifest.xml действий, которые используют фрагмент диалога.

 <activity ... android:windowSoftInputMode="adjustNothing"> ... 

И onCreateDialog чтобы скрыть мягкий вход:

 ... Dialog dialog = builder.create(); dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); return dialog; } 

FYI: https://developer.android.com/training/keyboard-input/visibility.html#ShowOnStart

Я просто использую следующую строку в своем диалоговом окне:

 getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); 

И больше ничего, см. Здесь полный пример:

  public class TextEditor extends DialogFragment { public TextEditor () { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_text_editor, container); //set to adjust screen height automatically, when soft keyboard appears on screen getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); //[add more custom code...] return view; } } 

Убедитесь, что макет находится внутри прокрутки:

 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> -->your layout here </ScrollView> 

И следуйте Dirk комментарий :

  @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_text_editor, container); //add this line getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); //[add more custom code...] return view; } 

Помимо изменений, упомянутых в других ответах, также проверяйте тему диалога
Из моих экспериментов атрибут « android: windowIsFloating » влияет на то, как окно реагирует на мягкий вход.

Если вы установите значение «false», окно не будет показываться, когда клавиатура станет видимой.

Несмотря на то, что немного ответа для ответа, поскольку вопрос находится в DialogFragment, следующий код решает мою проблему.

 @Override public void onCreate(Bundle savedInstanceState) { ... /** Setting STYLE_NO_FRAME allows popup dialog fragment to resize after keyboard is shown */ int style = DialogFragment.STYLE_NO_FRAME, theme = R.style.theme_popupdialog_style; setStyle(style, theme); } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { final Dialog dialog = super.onCreateDialog(savedInstanceState); dialog.setCanceledOnTouchOutside(false); dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); dialog.getWindow().setSoftInputMode(WIndowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); return dialog; } 

Что касается темы стиля, я применил следующий код

 /** must put parent="@android:style/Theme.Dialog for it to work */ <style name="theme_popupdialog_style" parent="@android:style/Theme.Dialog"> <item .... >...</item> </style>