Estoy usando un DialogFragment. Quiero el positivo y negativo de los botones de estar por encima del teclado cuando el usuario interactúa con una edición de texto como en el ejemplo de abajo, fotos de una pantalla en la de Gmail, la aplicación para tablet.

Cómo mantener DialogFragment positivo/negativo botones de arriba de teclado suave

Cómo mantener DialogFragment positivo/negativo botones de arriba de teclado suave

En mi intento de que no funciona, aquí está mi Diálogo Fragmentos onCreateDialog método

@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 aplicación, el teclado suave sube y cubre los diálogos positivos y negativos de los botones. Lo que me estoy perdiendo para permitir que los botones de estar por encima del teclado?

Gracias de antemano.

OriginalEl autor Dittimon | 2012-06-20

5 Comentarios

  1. 26

    Añadir en su onViewCreated:

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
        super.onViewCreated(view, savedInstanceState);
    }
    Gracias! Esto funcionó para mí en un escenario similar; edittext en lugar de botones.
    Si usted tiene DialogFragment sin botones estándar y desea hacer un cuadro de diálogo diseño del desplazable, el diseño tiene que residen en el interior ScrollView y getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); se debe establecer dentro de onViewCreated()

    OriginalEl autor Chiara

  2. 3

    Tuve el mismo problema, y he encontrado una solución. La parte esencial del diseño de archivo:

    <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" />

    Por lo que necesita para configurar los botones’ layout_weight 0, mientras que el scrollview peso es 1 o mayor.

    Espero que esto ayude.

    OriginalEl autor nistv4n

  3. 0

    Yo creo que eso tiene que ver con la LinearLayout y ScrollView. Quitar el fillViewport parte de la ScrollView y mostrar la barra de desplazamiento en el 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>
    Gracias, pero los botones son todavía ocultos.

    OriginalEl autor Kirk

  4. 0

    Has probado a añadir el atributo siguiente a la activity etiqueta en el manifiesto?

    <activity android:name=".SampleActivity"
        android:windowSoftInputMode="adjustResize" 
        ... >
    </activity>
    Gracias, pero eso no impidió que el teclado de su cobertura de los botones

    OriginalEl autor Alex Lockwood

  5. 0

    Esto es lo que ha funcionado 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>

    OriginalEl autor CautionHot

Dejar respuesta

Please enter your comment!
Please enter your name here