ボトムシートのフラグメント内に編集テキストがあります。編集テキストに焦点を合わせるとレイアウトが上がります。私は試した
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;
}
}
初期状態
キーボードが起動したとき
キーボードが常にレイアウトの上部に来るように、レイアウトを常に下部に配置する必要があります。
レイアウトを確認する
<?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" />
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を試してみてくださいフレームレイアウト。
BottomSheetFragmentの100%作業式
BottomSheetFragmentのonCreateDialogでこれを使用します
KeyboardUtil(getActivity(), view);
または
フラグメント用
new KeyboardUtil(this, findViewById(R.id.fragment_container));
このUtilクラスを使用して
クレジット:Mikepenz
古い設計バージョンにバグがあるようです。同じ問題が発生しましたが、設計バージョンをアップグレードしたの後、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);
ダイアログの装飾ビューを取得し、下部のパディングをheight 0
またはダイアログの高さに設定します。
getDialog.getWindow.getDecorView.setpadding(0,0,0,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);
}
});
マニフェストのアクティビティ宣言に、次のコード行を追加します。
Android:windowSoftInputMode="stateHidden"
Android:windowTranslucentNavigation="true"
Android:windowTranslucentStatus="true"