Ram Koti
Ram Koti

Reputation: 2211

Keyboard hides BottomSheetDialog

I was using BottomSheetDialog for taking some input from the customer, my view contains TextInputLayout and button below the TextInputLayout when the user clicks on TextInputLayout the below button is getting hide by keyboard, so I need to that button above the keyboard, tried many possibilities but not able to fix it. Attaching the pics regarding it.

enter image description here enter image description here

Java file(activity) code:

BottomSheetDialog customTipAmountBottomSheetDialog;
private void showCustomTipAmountBottomSheet() {
    customTipAmountBottomSheetDialog = new BottomSheetDialog(OrderActivity.this);
    View customTipAmountBottomSheetView = getLayoutInflater().inflate(R.layout.custom_tip_amount_bottom_sheet, null);
    customTipAmountBottomSheetDialog.setContentView(customTipAmountBottomSheetView);

    InputMethodManager imm = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
    assert imm != null;
    imm.showSoftInput(binding.invoiceDialog.submit, InputMethodManager.RESULT_HIDDEN);

    TextInputLayout customTipAmountBSTIL = customTipAmountBottomSheetView.findViewById(R.id.customTipAmountBSTIL);
    EditText customTipAmountBSET = customTipAmountBottomSheetView.findViewById(R.id.customTipAmountBSET);
    ImageView submit_custom_tip_amount = customTipAmountBottomSheetView.findViewById(R.id.submit_custom_tip_amount);

    submit_custom_tip_amount.setOnClickListener(view -> {
        String amount = customTipAmountBSET.getText().toString();
        if (amount.length() > 0 && Integer.parseInt(amount) > 0) {
            int tipAmount = Integer.parseInt(amount);
            if (tipAmount > 0 && tipAmount < 51) {
                binding.invoiceDialog.customTipAmountTv.setText(tipAmount);
                captainTipAmount = tipAmount;
                customTipAmountBottomSheetDialog.dismiss();
            } else {
                customTipAmountBSTIL.setError("Amount should be less than 50");
            }
        } else {
            customTipAmountBSTIL.setError("Requires a valid amount");
        }
    });

    customTipAmountBottomSheetDialog.show();
}

layout file custom_tip_amount_bottom_sheet.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
app:layout_behavior="android.support.design.widget.BottomSheetBehavior"
android:layout_height="match_parent">
<TextView
    android:id="@+id/customTipAmountCaptainNameTv"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginStart="16dp"
    android:layout_marginTop="16dp"
    android:layout_marginEnd="16dp"
    android:text="Tip amount for Rapido Captain"
    android:textColor="@color/black"
    android:textSize="16sp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<android.support.design.widget.TextInputLayout
    android:id="@+id/customTipAmountBSTIL"
    style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginTop="16dp"
    android:layout_marginEnd="8dp"
    android:hint="Enter amount"
    app:boxBackgroundColor="@color/grey_100"
    app:boxCornerRadiusTopEnd="8dp"
    app:boxCornerRadiusTopStart="8dp"
    app:errorEnabled="true"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/customTipAmountCaptainNameTv">

    <EditText
        android:id="@+id/customTipAmountBSET"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:digits="1234567890"
        android:ems="2"
        android:focusable="true"
        android:imeOptions="actionDone"
        android:inputType="phone" />
</android.support.design.widget.TextInputLayout>


<ImageView
    android:id="@+id/submit_custom_tip_amount"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="submitFeedbackConfirmationPopUp"
    android:padding="@dimen/margin_8"
    app:layout_constraintBottom_toBottomOf="@+id/customTipAmountBSTIL"
    app:layout_constraintEnd_toEndOf="@+id/customTipAmountBSTIL"
    app:layout_constraintTop_toTopOf="@+id/customTipAmountBSTIL"
    app:srcCompat="@drawable/ic_arrow_forward_black_24dp" />

<Button
    android:id="@+id/button2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="16dp"
    android:layout_marginEnd="16dp"
    android:text="Button"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/submit_custom_tip_amount" />

in Manifest file for activity file:

android:windowSoftInputMode="adjustPan"

Tried searching alot, but still not able to fix it. i got one answer related to my problem but it was with BottomSheetFragment()keyboard hides BottomSheetFragment, but i need with BottomSheetDialog. Please someone help me regarding this.

Let me know anything else info is required.

Upvotes: 1

Views: 1946

Answers (2)

Android Geek
Android Geek

Reputation: 9225

There are ways to achieve this:

1. Write below code into your Android Manifest file under <activity> tag:

android:windowSoftInputMode="stateHidden|adjustResize"

2. Write below code into your onCreate() method of activity:

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

I hope its work for you.

Upvotes: 1

Zakaria Hossain
Zakaria Hossain

Reputation: 2504

On onCreate() method in your activity java class use the below method.

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

Few days ago, i was faced same problem. Then using this portion of code into my onCreate() method, then the problem was solved.

Sample:

Bottom sheet with adjusting soft keyboard

Upvotes: 2

Related Questions