13

J'essaie de créer un BottomSheetDialogFragment avec un TextInputLayout à l'intérieur. Je règle cette BottomSheet en tant que adjustResize pour empêcher le clavier de recouvrir TextInputLayout. Le fait est que je reçois des comportements différents avec différentes versions Android.Différents comportements avec ADJUST_RESIZE dans BottomSheetDialogFragment

C'est la mise en page:

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/linearLayout" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<android.support.design.widget.TextInputLayout 
    android:id="@+id/textInputLayout" 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="16dp" 
    android:layout_marginEnd="16dp" 
    android:layout_marginStart="16dp" 
    android:layout_marginTop="16dp" 
    android:background="@android:color/darker_gray" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintEnd_toEndOf="parent" 
    app:layout_constraintStart_toStartOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintVertical_bias="0.0"> 

    <android.support.design.widget.TextInputEditText 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:hint="hint" /> 
</android.support.design.widget.TextInputLayout> 

Ce BottomSheetDialogFragment le:

public class TestFragment extends BottomSheetDialogFragment { 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 

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

    return inflater.inflate(R.layout.fragment_test, container, true); 
} 

}

Ceci est le résultat souhaité:

enter image description here

Et voici le résultat que je reçois dans certaines versions:

enter image description here

Je reçois le résultat souhaité avec:

  • S6 Galaxy avec Android 7.0
  • Emulateur avec < = Android 5.1

Et aucun résultat souhaité avec:

  • Nexus 5 avec Android 7.1.2 (LineageOS 14.1)
  • Emulator avec => Android 6,0 ​​

Est-ce que quelqu'un sait pourquoi cela arrive ou comment résoudre il?

Merci d'avance !!!

Cheers.

Répondre

2

Ce problème a perdu mon heure.Ne pas utiliser ADJUST_RESIZE. Enveloppez votre mise en page dans un NestedScrollView .

Rien de plus. Rien de moins. Problème résolu.

Voici le XML

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.constraint.ConstraintLayout 
     android:id="@+id/linearLayout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <android.support.design.widget.TextInputLayout 
      android:id="@+id/textInputLayout" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="16dp" 
      android:layout_marginEnd="16dp" 
      android:layout_marginStart="16dp" 
      android:layout_marginTop="16dp" 
      android:background="@android:color/darker_gray" 
      app:layout_constraintBottom_toBottomOf="parent" 
      app:layout_constraintEnd_toEndOf="parent" 
      app:layout_constraintStart_toStartOf="parent" 
      app:layout_constraintTop_toTopOf="parent" 
      app:layout_constraintVertical_bias="0.0"> 

      <android.support.design.widget.TextInputEditText 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:hint="hint" /> 
     </android.support.design.widget.TextInputLayout> 

    </android.support.constraint.ConstraintLayout> 

</android.support.v4.widget.NestedScrollView> 

Voici le code source

public class DemoFragment extends BottomSheetDialogFragment { 

    @Override 
    public void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    private BottomSheetBehavior.BottomSheetCallback mBottomSheetBehaviorCallback = new BottomSheetBehavior.BottomSheetCallback() { 

     @Override 
     public void onStateChanged(@NonNull View bottomSheet, int newState) { 
      if (newState == BottomSheetBehavior.STATE_HIDDEN) { 
       dismiss(); 
      } 
     } 

     @Override 
     public void onSlide(@NonNull View bottomSheet, float slideOffset) { 
     } 
    }; 

    @Override 
    public void setupDialog(Dialog dialog, int style) { 
     super.setupDialog(dialog, style); 
     View contentView = View.inflate(getContext(), R.layout.fragment_layout, null); 
     dialog.setContentView(contentView); 

     CoordinatorLayout.LayoutParams layoutParams = 
       (CoordinatorLayout.LayoutParams) ((View) contentView.getParent()).getLayoutParams(); 
     CoordinatorLayout.Behavior behavior = layoutParams.getBehavior(); 
     if (behavior != null && behavior instanceof BottomSheetBehavior) { 
      ((BottomSheetBehavior) behavior).setBottomSheetCallback(mBottomSheetBehaviorCallback); 
     } 
    } 

} 
+0

J'ai essayé mais j'obtenir le même résultat. Pourriez-vous coller le fichier XML que vous avez utilisé s'il vous plaît? Merci – Buntupana

+0

@Buntupana Mis à jour la réponse.S'il vous plaît essayer la solution et laissez-moi savoir le résultat. :) –

+0

désolé pour le retard, j'étais à l'étranger. Je vous ai copié et collé du code et ça ne marche toujours pas. J'ai essayé avec Android O – Buntupana