web-dev-qa-db-ja.com

ボトムシートフラグメントにキーボードが付属

ボトムシートのフラグメント内に編集テキストがあります。編集テキストに焦点を合わせるとレイアウトが上がります。私は試した

 Android:windowSoftInputMode="adjustNothing"

親アクティビティでは機能しますが、ダイアログフラグメントでは機能しません。

これは私の一番下のシートクラスです。

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

初期状態

enter image description here

キーボードが起動したとき

enter image description here

キーボードが常にレイアウトの上部に来るように、レイアウトを常に下部に配置する必要があります。

レイアウトを確認する

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

Dialog Fragment

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

onCreateViewの内部はこんな感じです。

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

編集1:

使用中のlayoutを変更して、現在のlayoutに適用します。

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>

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

編集2:

Android:elevation = "50dp"上の影のプロパティBottom Sheetを試してみてくださいフレームレイアウト

enter image description here

18
Jay Rathod RJ

BottomSheetFragmentの100%作業式

BottomSheetFragmentのonCreateDialogでこれを使用します

KeyboardUtil(getActivity(), view);

または

フラグメント用

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

このUtilクラスを使用して

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

クレジット:Mikepenz

12
LOG_TAG

古い設計バージョンにバグがあるようです。同じ問題が発生しましたが、設計バージョンをアップグレードしたの後、adjustnothingは期待どおりに動作します。

Gradleの場合:

com.Android.support:design:26.1.0

BottomSheetDialogで:

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

ダイアログの装飾ビューを取得し、下部のパディングをheight 0またはダイアログの高さに設定します。

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

からあなたの旗を交換してください

adjustNothing

adjustPan

公式ドキュメント を確認してください

0

私は同じシナリオに直面しました。EditTextの代わりにSearchViewを使用しました。BottomSheetDialogが非表示状態になったときにキーボードは非表示になりませんでした。

単にこれを呼び出すsearch_channel_template.clearFocus();

キーボードを隠すために使用したコードを共有します。

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

マニフェストのアクティビティ宣言に、次のコード行を追加します。

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