Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Bottom Sheet Fragment comes up with keyboard

I have an edit text inside a bottom sheet fragment. when the focus come on the edit text the layout goes up . i tried

 android:windowSoftInputMode="adjustNothing" 

its work for the parent activity but not for the dialog fragment.

This is my bottom sheet class:

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;     } } 

initial state

enter image description here

when keyboard comes up

enter image description here

i want the layout to always stay on the bottom the keyboard should come above the layout.

check the layout

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

like image 725
DKV Avatar asked Sep 02 '16 09:09

DKV


People also ask

How do I prevent the soft keyboard from pushing my view up in fragment?

Setting android:isScrollContainer = "false" inside the ScrollView worked for me. According to the documentation, settings "isScrollContainer" to true means that the scroll view can be resized to shrink its overall window so that there is space for an input method.

How do I close the keyboard on Android?

HIDE_IMPLICIT_ONLY, 0); Here pass HIDE_IMPLICIT_ONLY at the position of showFlag and 0 at the position of hiddenFlag . It will forcefully close soft Keyboard.


1 Answers

Use this in your Dialog Fragment.

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

Inside onCreateView like this.

@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:

I have made some changes with what layout you are using make it apply in your current layout.

Here is 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> 

Here is 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:

You can try android:elevation="50dp" property for shadow above Bottom Sheet give a try with that in frame layout.

enter image description here

like image 105
Jay Rathod RJ Avatar answered Sep 28 '22 10:09

Jay Rathod RJ