Cómo mantener los botones DialogFragment positivos / negativos por encima del teclado virtual
Estoy utilizando un DialogFragment. Quiero que los botones positivos y negativos permanezcan sobre el teclado cuando el usuario interactúa con un texto de edición como en el ejemplo de imágenes de abajo de una pantalla en la aplicación de tableta de Gmail.
- Ventaja de usar un DialogFragment sobre AlertDialog simple?
- Cómo cambiar el color de fondo alrededor de un DialogFragment?
- Callback de DialogFragment en el cambio de orientación
- Cómo hacer DialogFragment modal?
- Fragmento de fragmento de Android como fragmento de diálogo o fragmento habitual
En mi intento que no funciona, aquí está mi método Dialog Fragments onCreateDialog
@Override public Dialog onCreateDialog(Bundle savedInstanceState) { LayoutInflater factory = LayoutInflater.from(getActivity()); final View textEntryView = factory.inflate(R.layout.my_layout, null); return new AlertDialog.Builder(getActivity()) .setTitle(getString(R.string.paypal)) .setView(textEntryView) .setPositiveButton(R.string.dialog_ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { } } ) .setNegativeButton(R.string.dialog_cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { } } ) .create(); }
Y aquí está el R.layout.my_layout
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:fillViewport="true"> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical"> <ImageView android:id="@+id/paypal_button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="15dip" android:layout_marginBottom="15dip" /> <EditText android:id="@+id/edit_paypal_email" style="@style/GeneralEditText" android:hint="@string/contact_info_text_email" android:inputType="textEmailAddress" /> <View android:id="@id/horizontal_line" style="@style/HorizontalLine" android:layout_marginTop="@dimen/contact_info_line_margin_top" /> <!-- Notes --> <TextView android:text="@string/paypal_info1" style="@style/ContactInfoNotes" android:paddingBottom="5dip" /> <TextView android:text="@string/paypal_info2" style="@style/ContactInfoNotes" android:paddingBottom="5dip" /> <TextView android:text="@string/paypal_info3" style="@style/ContactInfoNotes" android:paddingBottom="5dip" /> <TextView android:text="@string/paypal_info4" style="@style/ContactInfoNotes" android:paddingBottom="5dip" /> </LinearLayout> </ScrollView>
En mi implementación, el teclado suave aparece y cubre los botones de diálogo positivo y negativo. ¿Qué me falta para permitir que los botones permanezcan sobre el teclado?
Gracias por adelantado.
- ¿Cómo conservar el estado del diálogo de fecha y hora en el cambio de orientación?
- Nullpointerexcepiton en el cursor al seleccionar la foto de la galería en el fragmento de diálogo
- ¿Por qué se llama DialogFragment.onCreateView cuando se está destruyendo la actividad?
- Evita que el cuadro de diálogo (o DialogFragment) se cierre cuando la aplicación pasa al fondo
- DailogFragment - getArguments / setArguments - ¿por qué pasar los argumentos en un lote?
- Recuperar valor de EditText en DialogFragment
- Cómo reemplazar un DialogFragment por otro DialogFragment?
- Establecer el color de la barra de estado desde DialogFragment
Sólo tiene que añadir esto en su onViewCreated:
@Override public void onViewCreated(View view, Bundle savedInstanceState) { getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); super.onViewCreated(view, savedInstanceState); }
Tuve el mismo problema, y encontré una solución. La parte esencial del archivo de diseño:
<ScrollView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1"> <!-- Form items --> </ScrollView> <!-- Include the layout which contains the buttons --> <include layout="@layout/fragment_dialog_button_bar" android:layout_weight="0" />
Así que usted necesita para establecer el peso de los botones de layout_weight 0, mientras que el peso del scrollview es 1 o más grande.
Espero que esto sea de ayuda.
Creo que esto tiene que ver con el LinearLayout
y ScrollView
. Elimine la parte fillViewport de ScrollView y muestre la barra de desplazamiento en LinearLayout.
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:scrollbars="vertical" android:scrollbarAlwaysDrawVerticalTrack="true"> <!-- Stuff --> </LinearLayout> </ScrollView>
¿Ha intentado agregar el atributo siguiente a la etiqueta de activity
en su manifiesto?
<activity android:name=".SampleActivity" android:windowSoftInputMode="adjustResize" ... > </activity>
Esto es lo que funcionó para mí.
public class Fragment1 extends DialogFragment{ @Override public void onViewCreated(View view, Bundle savedInstanceState){ getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); super.onViewCreated(view, savedInstanceState); } } <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <ScrollView android:layout_width="match_parent" android:fillViewport="true" android:layout_weight="1" android:layout_height="300dp" > <EditText android:layout_width="fill_parent" android:layout_height="fill_parent" android:inputType="textMultiLine|textAutoCorrect|textCapSentences" /> </ScrollView> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="0" /> </LinearLayout>
- No se puede instanciar la clase: android.support.v7.widget.SearchView
- No se pueden enviar SMS con SMSManager en Android