当需要弹出底部栏的时候,都是使用的pupwindow,或者自定义一个,用起来都是很方便的;然后既然有了BottomSheet,自然就有他存在的道理,就说一下怎么使用:
第一种是使用bottomSheetDialog:
直接自定义一个布局,然后setContentView,然后用show()、dismiss()方法控制他的显示和消失
private BottomSheetDialog bottomSheet;
bottomSheet = new BottomSheetDialog(this);
View view = LayoutInflater.from(this).inflate(R.layout.dialog_selectpic, null);
rechargeRecord = view.findViewById(R.id.rechargeRecord);
withdrawalsRecord = view.findViewById(R.id.withdrawalsRecord);
cancel = view.findViewById(R.id.cancel);
bottomSheet.setContentView(view);
然后对对应的布局控件实施监听或改变内容UI等
第二种是使用BottomSheetBehavior
直接在主布局里面添加内容
bottomSheetBehavior=BottomSheetBehavior.from(findViewById(R.id.bottomSheet));
然后通过getState()和setState()方法来控制它的显示和消失:
if(bottomSheetBehavior.getState() == BottomSheetBehavior.STATE_EXPANDED) {
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
}else {
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
}
布局文件:
<CoordinatorLayout>
<!--标题-->
<AppBarLayout>
<Toolbar/>
</AppBarLayout>
<NestedScrollView
android:id="@+id/bottonSheet"
app:layout_behavior="@string/bottom_sheet_behavior">
<LinearLayout>
...
<more view>
...
</LinearLayout>
</NestedScrollView>
</CoordinatorLayout>
设置那个behavior是关键
附赠一个最简单的自定义用法代码,拿来就用的那种:
private void showDialogSelector() {
final Dialog dialog = new Dialog(this, R.style.dialog);
dialog.setContentView(R.layout.dialog_selectpic);
dialog.getWindow().setGravity(Gravity.BOTTOM);
WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();
lp.width = ViewGroup.LayoutParams.MATCH_PARENT;
dialog.show();
dialog.findViewById(R.id.rechargeRecord).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.findViewById(R.id.withdrawalsRecord).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.findViewById(R.id.cancel).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
}
<style name="dialog" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">false</item>
<item name="android:windowNoTitle">true</item>
<item name="android:background">#FFF</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:backgroundDimEnabled">true</item>
</style>
内容布局就自己定义了