2012-06-20 31 views
15

Estoy usando 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 las fotos de ejemplo a continuación desde una pantalla en la aplicación de tableta Gmail.Cómo mantener los botones DialogFragment positivos/negativos sobre el teclado suave

without soft keyboard

With soft keyboard - buttons remain above keyboard as dialog resizes and content scrolls

En mi intento de que no funciona, aquí está mi método de diálogo Fragmentos 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á la 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 El teclado ft aparece y cubre los botones de diálogo positivos y negativos. ¿Qué me falta para permitir que los botones permanezcan sobre el teclado?

Gracias de antemano.

Respuesta

26

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); 
} 
+0

¡Gracias! Esto funcionó para mí en un escenario similar; editar texto en lugar de botones. – Karl

+2

Si tiene DialogFragment sin botones estándar y desea hacer que el diseño del cuadro de diálogo sea desplazable, el diseño debe residir dentro de ScrollView y 'getDialog(). GetWindow(). SetSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);' debe establecerse dentro de 'onViewCreated() ' –

0

Creo que esto tiene que ver con LinearLayout y ScrollView. Retire 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> 
+0

Gracias, pero los botones todavía están ocultos. – Dittimon

0

Ha intentado añadir el siguiente atributo a la etiqueta activity en su manifiesto?

<activity android:name=".SampleActivity" 
    android:windowSoftInputMode="adjustResize" 
    ... > 
</activity> 
+0

Gracias pero eso no impidió que el teclado suave cubriera los botones – Dittimon

3

que tenían el mismo problema, y ​​he encontrado 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" /> 

por lo que necesita para configurar los botones layout_weight 0, mientras que el peso de la ScrollView es 1 o más grande.

Espero que esto ayude.

0

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> 
Cuestiones relacionadas