web-dev-qa-db-fra.com

Le fragment de feuille inférieure vient avec le clavier

J'ai un texte d'édition à l'intérieur d'un fragment de feuille inférieure. lorsque le texte d'édition est mis au point, la disposition augmente. j'ai essayé

 Android:windowSoftInputMode="adjustNothing"

son travail pour l'activité parent mais pas pour le fragment de dialogue.

Ceci est ma classe de feuille de fond:

public class CustomBottomSheetDialogFragment extends BottomSheetDialogFragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.content_dialog_bottom_sheet, container, false);
        getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
        return v;
    }
}

etat initial

 enter image description here

quand le clavier arrive 

 enter image description here

je veux que la disposition reste toujours en bas, le clavier doit venir au-dessus de la disposition. 

vérifier la mise en page

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/bottomSheetLayout"
Android:layout_width="match_parent"
Android:layout_height="400dp"
Android:background="@Android:color/holo_blue_light"
Android:padding="@dimen/activity_vertical_margin"
app:behavior_hideable="true"
app:behavior_peekHeight="60dp"
app:layout_behavior="@string/bottom_sheet_behavior">


<EditText
    Android:id="@+id/edt"
    Android:layout_width="match_parent"
    Android:layout_height="40dp"
    Android:background="@Android:color/white"
    Android:padding="10dp" />

<TextView

    Android:layout_width="wrap_content"
    Android:layout_height="250dp"
    Android:layout_below="@+id/edt" />

16
DKV

Utilisez ceci dans votre Dialog Fragment.

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

À l'intérieur onCreateView comme ceci.

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

        View rootView = inflater.inflate(R.layout.dialog_fragment, container);

        //set to adjust screen height automatically, when soft keyboard appears on screen 
        getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);


        return rootView;
    }

EDIT 1:

J'ai apporté des modifications à la variable layout que vous utilisez pour l'appliquer à votre layout actuelle.

Voici layout.

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    Android:id="@+id/bottom_sheet"
    Android:layout_width="match_parent"
    Android:layout_height="400dp"
    Android:layout_gravity="bottom"
    Android:background="@Android:color/holo_blue_light"
    Android:padding="10dp"
    app:behavior_hideable="true"
    app:behavior_peekHeight="60dp"
    app:layout_behavior="Android.support.design.widget.BottomSheetBehavior">

    <ScrollView
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:fillViewport="true"
        Android:isScrollContainer="false"
        Android:scrollbars="vertical">

        <LinearLayout
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:orientation="vertical">

            <EditText
                Android:id="@+id/edt"
                Android:layout_width="match_parent"
                Android:layout_height="40dp"
                Android:background="@Android:color/white"
                Android:padding="10dp" />

            <TextView
                Android:layout_width="wrap_content"
                Android:layout_height="250dp"
                Android:layout_below="@+id/edt" />

        </LinearLayout>


    </ScrollView>

</FrameLayout>

Voici Fragment.

public class TestFragment extends BottomSheetDialogFragment {

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.test4, container, false);
        return v;
    }

EDIT 2:

Vous pouvez essayer la propriété Android: elevation = "50dp" pour les ombres au-dessus de feuille du bas essayer avec cela dans disposition du cadre

 enter image description here

11
Jay Rathod RJ

Formule de travail à 100% pour BottomSheetFragment

Utilisez ceci dans onCreateDialog in BottomSheetFragment 

KeyboardUtil(getActivity(), view);

ou 

Pour une utilisation fragmentée 

new KeyboardUtil(this, findViewById(R.id.fragment_container));

en utilisant cette classe Util 

https://github.com/mikepenz/MaterialDrawer/blob/aa9136fb4f5b3a80460fe5f47213985026d20c88/library/src/main/Java/com/mikepenz/materialdrawer/util/KeyboardUtil.Java

Crédit: Mikepenz 

10
LOG_TAG

On dirait qu’il ya un bogue dans l’ancienne version de design . J'ai rencontré le même problème, mais après avoir mis à niveau la version de design, aucun ajustement ne peut fonctionner comme prévu.

En grade:

com.Android.support:design:26.1.0

Dans votre BottomSheetDialog:

getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
5
franny zhao

Obtenez la vue de décor de la boîte de dialogue et définissez le remplissage inférieur sur height 0 ou la hauteur de votre boîte de dialogue.

getDialog.getWindow.getDecorView.setpadding(0,0,0,0);
0
surya

Remplacez votre drapeau de 

adjustNothing

à 

adjustPan

Vérifiez le Document officiel

0
Waqas Ahmed Ansari

J'ai fait face au même scénario. Au lieu de EditText, j'ai utilisé SearchView. Un clavier n'était pas masqué lorsque BottomSheetDialog passe à l'état masqué. 

Appelez simplement ceci search_channel_template.clearFocus ();

Je vais partager mon code que j'avais l'habitude de cacher le clavier.

search_channel_template = (SearchView) bottomSheetDialog.findViewById(R.id.search_channel_template);

txtVw_template_headerBS_down_id.setOnClickListener(new OnSingleClickListener() {
            @Override
            public void onSingleClick(View v) {
                search_channel_template.clearFocus();
                bottomSheetDialog.getBehavior().setState(BottomSheetBehaviorv2.STATE_HIDDEN);
            }
        });
0
MohanRaj S

dans la déclaration d'activité du manifeste, insérez ces lignes de code:

Android:windowSoftInputMode="stateHidden"
Android:windowTranslucentNavigation="true"
Android:windowTranslucentStatus="true" 
0
Khalid Taha