android底部弹窗的几种实现方式
实现底部弹窗有以下几种方式:
1.dialog
2.Activity
3.DialogFragment
4.bottomSheet
底部弹窗本质上就是将对话框显示在底部。
在开始之前先给出布局文件:
布局文件中显示4个button和一个NestedScrollView。NestedScrollView中为bottomSheet的内容。
一 通过Dialog实现
dialog.xml
public void onDialog(View view) { Dialog dialog=new Dialog(this);//可以在style中设定dialog的样式 dialog.setContentView(R.layout.dialog); WindowManager.LayoutParams lp=dialog.getWindow().getAttributes(); lp.gravity= Gravity.BOTTOM; lp.height= WindowManager.LayoutParams.WRAP_CONTENT; lp.width= WindowManager.LayoutParams.MATCH_PARENT; dialog.getWindow().setAttributes(lp); //设置该属性,dialog可以铺满屏幕 dialog.getWindow().setBackgroundDrawable(null); dialog.show();// dialog.getWindow().setWindowAnimations(); slideToUp(dialog.getWindow().findViewById(R.id.layout)); } public static void slideToUp(View view){ Animation slide = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 1.0f, Animation.RELATIVE_TO_SELF, 0.0f); slide.setDuration(2000); slide.setFillAfter(true); slide.setFillEnabled(true); view.startAnimation(slide); slide.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } }); }
二 通过activity实现
需要将activity的样式设置为Dialog的样式。
public class DialogActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.dialog); getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); getWindow().getAttributes().gravity= Gravity.BOTTOM; }}
相比于dialog的实现方式,通过activity可以管理弹窗的生命周期。
三 通过DialogFragment实现
DialogFragment在android 3.0时被引入。是一种特殊的Fragment,典型的用于:展示警告框,输入框,确认框等等。
在DialogFragment产生之前,创建对话框一般采用AlertDialog和Dialog。注:官方不推荐直接使用Dialog创建对话框。
使用DialogFragment来管理对话框,当旋转屏幕和按下后退键时可以更好的管理其声明周期,它和Fragment有着基本一致的声明周期。因此3.0之后最好使用DialogFragment,而不是使用以上两种方式。
使用DialogFragment至少需要实现onCreateView或者onCreateDIalog方法。onCreateView即使用定义的xml布局文件展示Dialog。onCreateDialog即利用AlertDialog或者Dialog创建出Dialog。
四 bottomSheet
Bottom Sheet是在support library 23.2之后提供的一个新控件,也就是需要用6.0以上的SDK进行编译才可以使用此控件。
添加依赖:
compile 'com.android.support:design:23.2.0'
在dialog.xml中通过NestedScrollView的layout_behavior已经实现了上滑拉出窗口。
当然也可以通过点击弹出。
public void onButtonSheet(View view) { BottomSheetBehavior behavior=BottomSheetBehavior.from(findViewById(R.id.scroll)); if (behavior.getState()==BottomSheetBehavior.STATE_EXPANDED) { behavior.setState(BottomSheetBehavior.STATE_COLLAPSED); }else if (behavior.getState()==BottomSheetBehavior.STATE_COLLAPSED) { behavior.setState(BottomSheetBehavior.STATE_EXPANDED); } }
可以直接通过代码的方式实现:
public void onButtonSheet(View view) {// BottomSheetBehavior behavior=BottomSheetBehavior.from(findViewById(R.id.scroll));// if (behavior.getState()==BottomSheetBehavior.STATE_EXPANDED)// {// behavior.setState(BottomSheetBehavior.STATE_COLLAPSED);// }else if (behavior.getState()==BottomSheetBehavior.STATE_COLLAPSED)// {// behavior.setState(BottomSheetBehavior.STATE_EXPANDED);// } BottomSheetDialog dialog=new BottomSheetDialog(this); dialog.setContentView(R.layout.dialog); dialog.show(); }
更多相关文章
- Android(安卓)自定义Dialog 控制
- Android监听USB插拔事件
- Android(安卓)对话框(Dialog)大全 建立你自己的对话框 【转】
- android adb 获取所有app 的uid
- Android图片加载之认识bitmap的四种加载方式
- 使用Android(安卓)studio3.6的java api方式调用opencv
- 关于android OpenGl ES 渲染方式
- android资源文件中ids.xml的使用
- 【Android(安卓)开发教程】显示进度对话框