实现底部弹窗有以下几种方式: 
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();    }

 

更多相关文章

  1. Android(安卓)自定义Dialog 控制
  2. Android监听USB插拔事件
  3. Android(安卓)对话框(Dialog)大全 建立你自己的对话框 【转】
  4. android adb 获取所有app 的uid
  5. Android图片加载之认识bitmap的四种加载方式
  6. 使用Android(安卓)studio3.6的java api方式调用opencv
  7. 关于android OpenGl ES 渲染方式
  8. android资源文件中ids.xml的使用
  9. 【Android(安卓)开发教程】显示进度对话框

随机推荐

  1. android4.2 长按POWER键3秒关机
  2. Android进阶之大话设计模式
  3. Android(安卓)Java 线程池 ThreadPoolExe
  4. Android--Task(stack)的使用
  5. Android(安卓)2018最新验证手机号正则表
  6. ReactNative对接Android步骤
  7. 实现仿windows正在加载loading动画
  8. android studio仿真时遇到VT-x is disabl
  9. android+面试题
  10. 我家云/粒子云Rockchip RK3328将Android