DialogFragment ne redimensionne pas lorsque le clavier est affiché
Je suis en train d'utiliser un SherlockDialogFragment
à poser des entrées de l'utilisateur. Tout fonctionne bien sur mon téléphone (Galaxy Nexus, 4.2), mais sur un plus petit téléphone (émulateur 2.3.3), lorsque le clavier s'affiche, il couvre les deux boutons de la DialogFragment, comme ceci:
Ma mise en page est à l'intérieur d'un ScrollView, et je vais changer le softInputMode à SOFT_INPUT_ADJUST_RESIZE
sur mon onViewCreated
. J'ai aussi essayé SOFT_INPUT_ADJUST_PAN
et ça ne fonctionne pas
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();
}
}
Et voici ma présentation:
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>
Oui, pourriez-vous m'aider et me guider sur la façon de montrer ces boutons? Soit pour faire un PANORAMIQUE de la vue ou de laisser la redimensionner...
source d'informationauteur MagicMicky
Vous devez vous connecter pour publier un commentaire.
Définir la
windowSoftInputMode
propriétéadjustNothing
dans leAndroidManifest.xml
des activités qui utilisent la boîte de dialogue fragment.et
onCreateDialog
pour masquer le soft d'entrée:FYI: https://developer.android.com/training/keyboard-input/visibility.html#ShowOnStart
Je viens d'utiliser la ligne suivante dans mon DialogFragment:
Et rien d'autre, voir ici exemple complet:
Assurez-vous que la mise en page est à l'intérieur d'un défilement de l'affichage:
et suivez Dirk commentaire:
À part les changements mentionnés dans d'autres réponses aussi vérifier la thème de dialogfragment
À partir de mes expériences, "android:windowIsFloating" attribut semble affecter la façon dont la fenêtre réagit à la douceur d'entrée.
Il vous définissez ce paramètre à false, la fenêtre ne sera pas glisser lorsque le clavier devient visible.
Même si il est un peu tard pour une réponse, car la question est dans DialogFragment, le code suivant résout mon problème.
Comme pour le thème de style, j'ai appliqué le code suivant
Cela peut aussi être causée par:
Essayer de le supprimer de votre thème.
Pour DialogFragment, il semble que l'application SoftInputMode ne fonctionne que si programmés à partir de l'intérieur de la DialogFragment classe, pas l'appelant de classe:
Aussi, pour la méthode onStart, j'ai ajouté ce qui suit à développez la boîte de dialogue mise en page à l'horizontale: