[解決済み] BottomSheetDialogFragmentの状態をexpandedに設定する。
質問
フラグメントエクステンションの状態をどのように設定するのですか?
BottomSheetDialogFragment
を使って拡張したフラグメントの状態を
BottomSheetBehavior#setState(STATE_EXPANDED)
を使用して展開することはできますか?
https://code.google.com/p/android/issues/detail?id=202396 は言う。
BottomSheetは最初STATE_COLLAPSEDに設定されています。拡大したい場合はBottomSheetBehavior#setState(STATE_EXPANDED)を呼び出してください。ビューレイアウトの前にこのメソッドを呼び出すことはできないことに注意してください。
このメソッドは
推奨プラクティス
は最初にビューを膨らませる必要がありますが、BottomSheetBehaviourをどのようにフラグメントに設定するかはわかりません(
BottomSheetDialogFragment
).
View bottomSheet = coordinatorLayout.findViewById(R.id.bottom_sheet);
BottomSheetBehavior behavior = BottomSheetBehavior.from(bottomSheet);
どのように解決するのですか?
<ブロッククオート"ビューレイアウトの前にこのメソッドを呼び出すことはできませんのでご注意ください。
上の文章がヒントです。
ダイアログにはリスナーが存在し、そのリスナーは一度ダイアログが 表示される . ダイアログがレイアウトされていない場合は、表示することができません。
そこで
onCreateDialog()
で、モーダルなボトムシートの (
BottomSheetFragment
) で、ダイアログを返す直前に (あるいは、ダイアログへの参照を得たらどこでも) 呼び出します。
// This listener's onShow is fired when the dialog is shown
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
// In a previous life I used this method to get handles to the positive and negative buttons
// of a dialog in order to change their Typeface. Good ol' days.
BottomSheetDialog d = (BottomSheetDialog) dialog;
// This is gotten directly from the source of BottomSheetDialog
// in the wrapInBottomSheet() method
FrameLayout bottomSheet = (FrameLayout) d.findViewById(android.support.design.R.id.design_bottom_sheet);
// Right here!
BottomSheetBehavior.from(bottomSheet)
.setState(BottomSheetBehavior.STATE_EXPANDED);
}
});
私の場合、カスタム
BottomSheet
が判明しました。
@SuppressWarnings("ConstantConditions")
public class ShareBottomSheetFragment extends AppCompatDialogFragment {
@NonNull @Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
BottomSheetDialog dialog =
new BottomSheetDialog(getActivity(), R.style.Haute_Dialog_ShareImage);
dialog.setContentView(R.layout.dialog_share_image);
dialog.findViewById(R.id.cancel).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
BottomSheetDialog d = (BottomSheetDialog) dialog;
FrameLayout bottomSheet = (FrameLayout) d.findViewById(android.support.design.R.id.design_bottom_sheet);
BottomSheetBehavior.from(bottomSheet).setState(BottomSheetBehavior.STATE_EXPANDED);
}
});
SwitchCompat switchview = (SwitchCompat) dialog.findViewById(R.id.switchview);
switchview.setTypeface(FontCache.get(dialog.getContext(), lookup(muli, NORMAL)));
return dialog;
}
}
これが役に立ったら教えてください。
アップデートのお知らせ
を上書きすることもできることに注意してください。
BottomSheetDialogFragment
としています。
public class SimpleInitiallyExpandedBottomSheetFragment extends BottomSheetDialogFragment {
@NonNull @Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
BottomSheetDialog dialog = (BottomSheetDialog) super.onCreateDialog(savedInstanceState);
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
BottomSheetDialog d = (BottomSheetDialog) dialog;
FrameLayout bottomSheet = (FrameLayout) d.findViewById(android.support.design.R.id.design_bottom_sheet);
BottomSheetBehavior.from(bottomSheet).setState(BottomSheetBehavior.STATE_EXPANDED);
}
});
// Do something with your dialog like setContentView() or whatever
return dialog;
}
}
しかし、私は本当に誰もがベースとしてそれを行うことを望むのかわかりません
BottomSheetFragment
を返す以外には何もしません。
BottomSheetDialog
.
androidx用アップデート
AndroidX を使用する場合、以前はリソースが
android.support.design.R.id.design_bottom_sheet
にあったリソースが
com.google.android.material.R.id.design_bottom_sheet
.
関連
-
[解決済み] インスタンス状態の保存を使用してアクティビティ状態を保存するにはどうすればよいですか?
-
[解決済み] フラグメントのインスタンス状態をバックスタックに正しく保存する方法は?
-
[解決済み] ViewPagerとフラグメント - フラグメントの状態を保存する正しい方法は何ですか?
-
[解決済み] Nexus 4でUSBデバッグモードを見つける方法とオンにする方法
-
[解決済み] 深くネストされたスタックから離れるとき、Fragmentのバックスタックをクリーンアップする方法はこれで良いのでしょうか?
-
[解決済み] プログラム的に電話をかけるには?
-
[解決済み] Androidのadb logcatでTAG名で特定のメッセージを除外する方法は?
-
[解決済み] 通知をクリックした後にアプリケーションを開く
-
[解決済み] Android Studio: キーの復元ができない
-
[解決済み] 警告 あなたのApkは、プライバシーポリシーが必要なパーミッションを使用しています。(android.permission.READ_PHONE_STATE)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] AndroidにおけるViewPager2の適切な実装
-
[解決済み] アンドロイドフラグメント onRestoreInstanceState
-
[解決済み] アンドロイドアプリのユーザーデータを消去する
-
[解決済み] FloatingActionButtonのサンプルとサポートライブラリ
-
[解決済み] AndroidでビューのonClickイベントをその親に渡すには?
-
[解決済み] エラー Android Studioで名前'default'を持つ構成が見つかりません。
-
[解決済み] Android Studio: キーの復元ができない
-
[解決済み] Error:No such property: GROUP for class: org.gradle.api.publication.maven.internal.ant.DefaultGroovyMavenDeployer
-
[解決済み] 複数のローダーを持つLoaderManager: 正しいカーソルローダーを取得する方法
-
[解決済み] RelativeLayoutレイアウトパラメータをxmlではなくコードで設定するには?